我有一个包含数据的文档,我想自动化一项研究。在多列vba excel上搜索
对于为例我有
| lastName | firstName | age | result
而且我想获得的结果排在那里的lastName =史密斯,名字= JHON和年龄= 42
我知道该怎么做,与循环,但复杂度高是否还有其他解决方案?
我有一个包含数据的文档,我想自动化一项研究。在多列vba excel上搜索
对于为例我有
| lastName | firstName | age | result
而且我想获得的结果排在那里的lastName =史密斯,名字= JHON和年龄= 42
我知道该怎么做,与循环,但复杂度高是否还有其他解决方案?
你可以试试这个数组公式:
=INDEX(D2:D10;MATCH(1;(A2:A10="Smith")*(B2:B10="John")*(C2:C11=42);0))
这是一个数组公式,所以你需要按Ctrl Shift键回车输入公式
CRondao有一个很好的解决方案,将返回的第一场比赛,并适用于任何数据类型。如果result
是数字,你要总结所有比赛,这将工作:
=SUMPRODUCT(--($A$1:$A$4="Smith"),--($B$1:$B$4="Jhon"),--($C$1:$C$4=42),$D$1:$D$4)
注意,这不是一个数组公式。
在这种情况下,我通常使用CONCATENATE()
来构建一个“查找键”来组合这些值。然后,我可以根据需要使用VLOOKUP()
或SUMIF()
返回结果,因为我发现这些函数比范围偏移量/索引/匹配公式更直观,更容易编写。
这里有一个演示工作表的图像,左上角的单元格为“A1”:
如果有多个匹配,你会马上看到总数。您还可以使用自动过滤器,等等,等等....
下面是过滤行中的公式:
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
,它只会返回它在列表中找到的第一个结果,否则返回#N/A
。
这些数据的第一行,其可以被向下复制到覆盖整个范围在式:
A6: =CONCATENATE(B6,C6,D6)
E6: =IF($A6=$A$3,1,"")
F6: =IF($A6=$A$3,ROW(),"")
你可以使用[**自动过滤**](http://msdn.microsoft .COM/EN-US /图书馆/办公室/ ff193884.aspx)。看到我的[**答案在这里获取更多详细信息**](http://stackoverflow.com/questions/21091948/searching-over-multiple-columns-in-excel-vba/21092259#21092259)。 –
是'result'数字,如果是,其他列是唯一的(没有重复的机会),或者如果可能重复,相应值的总和就是期望的返回结果? – SeanC