基于没有VBA的单元格值提取所有行
我真的很努力地find一个答案在线我真的只findVBA解决这个问题,这不是我想学习如何做。
问题
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
从上面的数据集非常简单,我希望重新创build此范围,但只筛选select血型O.
我的尝试
然后尝试将IF / THEN / ELSE逻辑合并到MATCH操作数中,试图找出输出到数组的行号。 (不会发布我的失败尝试)我在网上find了一个类似的问题,但他们通过手动引用范围使用行(A1),行(A2)等解决了它不是我之后。
真的想要学习如何使用Excel公式只做这种types的迭代select。 即使没有解决问题的任何方向的资源,我可以更多地了解这种types的问题,仍然将不胜感激。
这不使用数组公式,但使用辅助列 。 假设列A到D中的数据,在E2中input:
=IF(A2="O",1+MAX($E$1:E1),"")
并抄下来:
每个O行都标有一个简单的顺序值。 这使得通常的MATCH()/ INDEX()方法变得很容易。
select其他单元格,然后input:
=IFERROR(INDEX(A:A,MATCH(ROWS($1:1),$E:$E,0)),"")
并跨越和往下复制这个单元格:
这是数组公式的解决scheme。 它会计算得非常慢,老实说,VBA是一个更好的解决scheme。 input公式后,您需要通过点击“Ctrl + Shift + Enter”来告诉excel这些是数组公式,这会在公式中加上{}。 最后,拖动数组公式来查看血型为“O”的第一个“X”结果:
“Blood”的第一个单元格公式 – >假设血液位于sheet1的A列中{=IFERROR(INDEX(Sheet1!$A:$D,SMALL(IF(Sheet1!$A:$A="O",ROW(Sheet1!$A:$A)),ROW(1:1)),1,1),"")}
第一个单元格为“名称”的单元格 – >假设名称位于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),"")}
第一个单元格公式为“性别” – >假定性别位于第一列d中的sheet1 {=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行(从E列开始的任何位置),并在3列之间复制,
=IFERROR(INDEX(A:A,SMALL(IF(ISNUMBER(SEARCH("O",$A$2:$A$11)),ROW($A$2:$A$11),""),ROW()-1)),"")
这是使用Ctrl + Shift + Enterinput并使用固定数组(A2:A11)。 如果你的数组要改变大小,你可以通过使用INDIRECT
和COUNTA
使其对它的引用是dynamic的,这样它总是包含使用的范围,如下所示:
=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
函数查找“O”,然后IF
find“O”,则IF
返回行号,如果没有find“O”,则返回任何值。
SMALL
函数正在查找由SEARCH
函数返回的结果的第n个实例,其中n = ROW()-1
。
INDEX
函数返回数组A中的第n个值:A,B:B等,其中n = SMALL
函数返回的行号。
IFERROR
函数并不是必需的,但是它使得数据集更加清晰,只需要replace那些没有返回空白的公式就可以了。