2014-02-17 416 views
1

我有一个包含数据的文档,我想自动化一项研究。在多列vba excel上搜索

对于为例我有

| lastName | firstName | age | result 

而且我想获得的结果排在那里的lastName =史密斯,名字= JHON和年龄= 42

我知道该怎么做,与循环,但复杂度高是否还有其他解决方案?

+2

你可以使用[**自动过滤**](http://msdn.microsoft .COM/EN-US /图书馆/办公室/ ff193884.aspx)。看到我的[**答案在这里获取更多详细信息**](http://stackoverflow.com/questions/21091948/searching-over-multiple-columns-in-excel-vba/21092259#21092259)。 –

+2

是'result'数字,如果是,其他列是唯一的(没有重复的机会),或者如果可能重复,相应值的总和就是期望的返回结果? – SeanC

回答

1

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

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

这是一个数组公式,所以你需要按Ctrl Shift键回车输入公式

1

CRondao有一个很好的解决方案,将返回的第一场比赛,并适用于任何数据类型。如果result是数字,你要总结所有比赛,这将工作:

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

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

0

在这种情况下,我通常使用CONCATENATE()来构建一个“查找键”来组合这些值。然后,我可以根据需要使用VLOOKUP()SUMIF()返回结果,因为我发现这些函数比范围偏移量/索引/匹配公式更直观,更容易编写。

这里有一个演示工作表的图像,左上角的单元格为“A1”:

MultiLookup.xls

如果有多个匹配,你会马上看到总数。您还可以使用自动过滤器,等等,等等....

下面是过滤行中的公式:

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(),"")