我真的很难找到答案,因为网上我真的只找到了解决这个问题的VBA解决方案,而这并不是我想要学习的方法。
问题
BLOOD NAME AGE GENDER
A David 18 Male
B Sarah 22 Female
O Lucy 32 Female
AB Steven 23 Male
O John 11 Male
B Mike 25 Male
AB Paul 24 Male
O Amy 23 Female
B Drake 22 Female
O Linda 11 Female
非常简单地从上面的数据集中我希望重新创建此范围,但仅过滤选择BLOOD TYPE O.
MY ATTEMPTS
从VLookup表开始,但是在第一次出现O时停止。然后尝试将IF / THEN / ELSE逻辑合并到MATCH操作数中,试图找到输出到数组的行号。 (不会发布我失败的尝试)我确实在网上发现了一个类似的问题,但是他们通过手动使用ROW(A1),ROW(A2)等手动参考范围来解决它并不是我所追求的。
真的想学习如何仅使用Excel公式进行此类迭代选择。即使没有解决问题的任何方向,我可以了解更多关于这种类型问题的资源,仍然会受到赞赏。
答案 0 :(得分:7)
这不使用数组公式,但使用帮助列。假设cols A 到 D 的数据,在 E2 中输入:
=IF(A2="O",1+MAX($E$1:E1),"")
并复制下来:
每个 O 行都标有简单的顺序值。这使得通常的 MATCH()/ INDEX()方法变得容易。
选择其他一些单元格并输入:
=IFERROR(INDEX(A:A,MATCH(ROWS($1:1),$E:$E,0)),"")
并向下和向下复制此单元格:
答案 1 :(得分:2)
这是一个包含数组公式的解决方案。它的计算速度非常慢,老实说VBA是一个更好的解决方案。您需要在输入公式后按“Ctrl + Shift + Enter”告诉excel这些是数组公式,这将在方程式周围添加{}。最后,向下拖动数组公式以查看血型为“O”的第一个“X”结果:
“血液”的第一个细胞配方 - >假设血液在sheet1的A列中
{=IFERROR(INDEX(Sheet1!$A:$D,SMALL(IF(Sheet1!$A:$A="O",ROW(Sheet1!$A:$A)),ROW(1:1)),1,1),"")}
“名称”的第一个单元格公式 - >假设name在sheet1的B列中
{=IFERROR(INDEX(Sheet1!$A:$D,SMALL(IF(Sheet1!$A:$A="O",ROW(Sheet1!$A:$A)),ROW(1:1)),2,1),"")}
“年龄”的第一个单元格公式 - >假设年龄在sheet1的c列中
{=IFERROR(INDEX(Sheet1!$A:$D,SMALL(IF(Sheet1!$A:$A="O",ROW(Sheet1!$A:$A)),ROW(1:1)),3,1),"")}
“性别”的第一个单元格公式 - >假设性别在sheet1的d列中
{=IFERROR(INDEX(Sheet1!$A:$D,SMALL(IF(Sheet1!$A:$A="O",ROW(Sheet1!$A:$A)),ROW(1:1)),4,1),"")}
结果:
BLOOD NAME AGE GENDER
O Lucy 32 Female
O John 11 Male
O Amy 23 Female
O Linda 11 Female
答案 2 :(得分:2)
以下数组公式可放在第2行(从E列开始的任何位置),并在必要时向下复制3列并向下:
=IFERROR(INDEX(A:A,SMALL(IF(ISNUMBER(SEARCH("O",$A$2:$A$11)),ROW($A$2:$A$11),""),ROW()-1)),"")
使用 Ctrl + Shift + Enter 输入并使用固定数组(A2:A11)。如果您的数组要更改大小,您可以使用INDIRECT
和COUNTA
动态引用它,以便它始终包含使用的范围,如下所示:< / p>
=IFERROR(INDEX(A:A,SMALL(IF(ISNUMBER(SEARCH("O",INDIRECT("$A2:$A"&COUNTA(A:A)))),ROW(INDIRECT("$A2:$A"&COUNTA(A:A))),""),ROW()-1)),"")
发生了什么:
SEARCH
函数正在查找&#34; O&#34; s,然后IF
返回行号,如果&#34; O&#34;被发现,没有,如果没有&#34; O&#34;被发现了。
SMALL
函数正在查找SEARCH
函数返回的 n 结果实例,其中 n = {{1 }}
ROW()-1
函数返回数组A:A,B:B等中的 n 值,其中 n =返回的行号INDEX
函数。
SMALL
函数不是必需的,但它可以创建一个更干净的数据集,它所做的只是替换那些没有用空白返回任何有用的公式。
答案 3 :(得分:0)