2014-02-17 235 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(),"")