给出excel中的一组值,如何在列中找到它们?

时间:2017-10-26 07:58:17

标签: excel select filter subset

给出一个子集A:

selection
1
2
3
4
5
Excel表单

col1    col2   and so on...
1       kuku 
300     pupu
4       abcd
22      sfds
900     aqww

我想选择"选择"表格中的内容,就像我们在SQL中所做的那样:

select * from excel_sheet where col1 == selection

如何在Excel中执行此操作?

1 个答案:

答案 0 :(得分:0)

你可以尝试这样的东西,但必须将其拉下来以获得匹配的所有行和列

=IFERROR(INDEX(A$2:A$6,SMALL(IF(ISNUMBER(MATCH($A$2:$A$6,$D$2:$D$6,0)),ROW($A$2:$A$6)-1),ROW()-1)),"")

必须使用 Ctrl Shift 输入

作为数组公式输入

enter image description here

另一种方法是将辅助列添加到数据库并对其进行过滤。

公式的操作如下(从最里面到最外层)

MATCH($A$2:$A$6,$D$2:$D$6,0))

匹配通常需要单个查找值Match(lookupValue,range,options),但也可以与查找值数组一起使用,在这种情况下,它返回一个包含每个查找值结果的数组,在本例中为A2:A6中的每个单元格,当在D2中查找时:D6给出

1; #N/A; 4; #N/A; #N/A
ISNUMBER(MATCH($A$2:$A$6,$D$2:$D$6,0))

我们不想知道D2中的匹配位置:D6,只是它是否成功。 ISNUMBER出品

true: false; true; false; false
IF(ISNUMBER(MATCH($A$2:$A$6,$D$2:$D$6,0)),ROW($A$2:$A$6)-1)

我们希望在A2:A6中找到成功匹配的行。如果测试失败,输出将为false,所以你得到

2; false; 4; false ; false

并减去一个以便

1; false; 3; false; false
SMALL(IF(ISNUMBER(MATCH($A$2:$A$6,$D$2:$D$6,0)),ROW($A$2:$A$6)-1),ROW()-1)

Row()指的是包含公式的单元格的行(最初为F2),因此得到2,然后从得到的1中减去1.因此,SMALL将为您提供上述数组中的最小元素:1。将公式下拉到B3中,它将为您提供数组中的下一个非假元素:3。

INDEX(A$2:A$6,SMALL(IF(ISNUMBER(MATCH($A$2:$A$6,$D$2:$D$6,0)),ROW($A$2:$A$6)-1),ROW()-1)),"")

标准使用INDEX给出第A2个A6范围内的第n个细胞。在F2中,这是第一个包含1的单元格。在F3中,它是第三个单元格,包含4.在G2中,公式被拉过,因此它适用于范围B2:B6。

=IFERROR(INDEX(A$2:A$6,SMALL(IF(ISNUMBER(MATCH($A$2:$A$6,$D$2:$D$6,0)),ROW($A$2:$A$6)-1),ROW()-1)),"")

如果索引/匹配因为没有更多匹配而失败,则IFERROR显示一个空单元格。

这些公式看起来很复杂,但它们是由相当标准的模式构建的,并且由常规Excel用户社区认可。

通过删除-1的硬编码可以改进公式,因此不易受插入/删除的影响

=IFERROR(INDEX(A$2:A$6,SMALL(IF(ISNUMBER(MATCH($A$2:$A$6,$D$2:$D$6,0)),ROW($A$2:$A$6)-ROW(A$1)),ROW()-ROW(A$1))),"")