基于没有VBA的单元格值提取所有行

Jef*_*son 6 excel excel-formula

我真的很难找到答案,因为在网上我真的只找到了这个问题的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
Run Code Online (Sandbox Code Playgroud)

非常简单地从上面的数据集我希望重新创建这个范围,但只过滤选择BLOOD TYPE O.

我的尝试

从VLookup表开始,然后在第一次出现O时停止.然后尝试将IF/THEN/ELSE逻辑合并到MATCH操作数中,试图找到输出到数组的行号.(不会发布我失败的尝试)我确实在网上发现了一个类似的问题,但他们通过手动使用ROW(A1),ROW(A2)等手动参考范围解决了它并不是我追求的.

真的想学习如何使用Excel公式进行这种类型的迭代选择.即使没有解决问题任何方向的资源,我可以了解更多关于这种类型的问题,仍然会受到赞赏.

Gar*_*ent 7

这不使用数组公式,但使用辅助列.假设在col AD中的数据,在E2中输入:

=IF(A2="O",1+MAX($E$1:E1),"")
Run Code Online (Sandbox Code Playgroud)

并复制下来:

在此输入图像描述
每个O行都标有一个简单的顺序值.这使得通常的MATCH()/ INDEX()方法变得容易.

选择其他一些单元格并输入:

=IFERROR(INDEX(A:A,MATCH(ROWS($1:1),$E:$E,0)),"")
Run Code Online (Sandbox Code Playgroud)

并横向和向下复制此单元格:

在此输入图像描述


Nat*_*ent 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),"")}

“名称”的第一个单元格公式 --> 假设名称位于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
Run Code Online (Sandbox Code Playgroud)