在Excel中给定一组值,如何在列中find它们?

给定子集A:

selection 1 2 3 4 5 

Excel表单:

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

我想从工作表中select“select”内容,就像我们在SQL中所做的那样:

 select * from excel_sheet where col1 == selection 

我怎样才能在Excel中做到这一点?

你可以尝试这样的事情,但它必须拉下来,并获得所有匹配的行和列

 =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作为数组公式input

在这里输入图像说明

另一种方法是在数据库中添加一个辅助列并对其进行筛选。

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

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

匹配通常只需要一个查找值Match(lookupValue,range,options),但也可以与查找值数组一起使用,在这种情况下,它会返回一个包含每个查找值结果的数组,在这种情况下,每个单元格A2:在D2中抬头的A6: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中成功匹配的行。 如果testing失败,输出将会是错误的

 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用户社区认可的相当标准的模式构build的。

可以通过去除-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))),"")