我有一個包含數據的文檔,我想自動化一項研究。在多列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