在多列vba excel上search

我有一个数据文件,我想自动化一个研究。

例如我有

| lastName | firstName | age | result 

我想要得到结果行在哪里lastName =史密斯,firstName = Jhon和年龄= 42

我知道如何做到这一点循环,但复杂性是高的还有其他的解决scheme?

你可以试试这个数组公式:

 =INDEX(D2:D10;MATCH(1;(A2:A10="Smith")*(B2:B10="John")*(C2:C11=42);0)) 

这是一个数组公式,所以你需要Ctrl Shift Enter来input公式

CRondao有一个很好的解决scheme,将返回第一个匹配,并在任何数据types的作品。 如果result是数字,你想总结所有匹配,这将工作:

 =SUMPRODUCT(--($A$1:$A$4="Smith"),--($B$1:$B$4="Jhon"),--($C$1:$C$4=42),$D$1:$D$4) 

请注意,这不是一个数组公式。

在这种情况下,我通常使用CONCATENATE()来组合这些值来构build一个“查找键”。 然后,我可以根据需要使用VLOOKUP()SUMIF()返回结果,因为我发现这些函数比int offset和index / match公式更容易编写。

这是一个演示工作表的图像,左上angular的单元格是“A1”:

MultiLookup.xls

如果有多个匹配,您会立即看到总数。 你也可以使用自动filter等等…

以下是filter行中的公式:

 A3: =CONCATENATE(B3,C3,D3) E3: =SUMIF($A$5:$A$10,$A$3,E$5:E$10) F3: =VLOOKUP($A$3,$A$5:$F$10,6,FALSE) 

由于F3使用VLOOKUP()FALSE选项,它只返回它在列表中find的第一个结果,否则返回#N/A

这些是第一行数据中的公式,可以将其复制到整个范围:

 A6: =CONCATENATE(B6,C6,D6) E6: =IF($A6=$A$3,1,"") F6: =IF($A6=$A$3,ROW(),"")