在多列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”:
如果有多个匹配,您会立即看到总数。 你也可以使用自动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(),"")