HI,大家好,我是星光。
在Excel社群的初階函數練習群裡,有這樣一道練習題:
這是一個典型的多條件數據查詢問題。A:D列是數據源,需要根據F:G列的月考次數和人名,在H列查詢相關得分。
1,LOOKUP函數▼
該類問題我們通常使用LOOKUP函數。
解法1:LOOKUP函數 ▼
=IFERROR(LOOKUP(1,0/(($A$2:$A$40=F2)*($C$2:$C$40=G2)),$D$2:$D$40),"查無")
=LOOKUP(1,0/(條件區域1=條件值),結果區域),這是LOOKUP函數的經典套路,如果該函數查無結果,則使用IFERROR函數將錯誤值轉換為字符串"查無"。
關於LOOKUP函數的詳細教程可以閱讀▼
從入門到進階,一帖帶你了解LOOKUP函數那些事兒
2,XLOOKUP函數▼
如果你所使用的版本是MS365,更推薦使用XLOOKUP函數,它比LOOKUP函數的解法效率更高一些。
解法2:XLOOKUP函數 ▼
=XLOOKUP(F2&G2,$A$2:$A$40&$C$2:$C$40,$D$2:$D$40,"查無")
關於XLOOKUP函數的詳細教程可以閱讀▼
12個案例!帶你從入門到進階全面解析函數新貴XLOOKUP
3,FILTER函數▼
或者使用FILTER函數,該函數目前也是MS365所獨有的。
解法3:FILTER函數 ▼
=FILTER($D$2:$D$40,($A$2:$A$40=F2)*($C$2:$C$40=G2),"查無")
關於FILTER函數的詳細教程可以閱讀▼
FILTER才是365新函數系列的核心,而不是XLOOKUP……
4,VLOOKUP函數▼
有朋友可能會想,這樣的問題能否使用大眾情人VLOOKUP函數?
當然也可以。
解法4:VLOOKUP函數 ▼
=IFERROR(VLOOKUP(F2&G2,IF({1,0},$A$2:$A$40&$C$2:$C$40,$D$2:$D$40),2,0),"查無")
這是一個數組公式,是很久以前風行一時的IF({1,0}套路,不過這個套路運算效率非常差,除了炫技冒充王者之外,都不建議使用。
5,INDEX函數▼
此外也可以使用INDEX+MATCH函數組合。
解法5:INDEX+MATCH數組 ▼
=IFERROR(INDEX(D$2:D$40,MATCH(F2&G2,$A$2:$A$40&$C$2:$C$40,0)),"查無")
這也是一個數組公式,先使用MATCH函數定位所需結果的位置,再使用INDEX函數按圖索驥。相關教程可以參考知識星球的INDEX函數系列。
……
INDEX函數可以實現的,通常來說OFFSET和INDIRECT也可以。不過這倆人屬於易失函數,運算效率不是很好,正常情況下就不推薦使用。
6,OFFSET函數▼
解法6:OFFSET+MATCH數組 ▼
=IFERROR(OFFSET(D$2,MATCH(F2&G2,$A$2:$A$40&$C$2:$C$40,0)-1,0),"查無")
關於OFFSET函數的詳細教程可以閱讀▼
說來你不信,OFFSET函數其實是個遊戲機
7,INDIRECT函數▼
解法7:INDIRECT+MATCH數組 ▼
=IFERROR(INDIRECT("d"&MATCH(F2&G2,$A$2:$A$40&$C$2:$C$40,0)+1),"查無")
關於INDIRECT函數的詳細教程可以閱讀▼
說來你不信,INDIRECT函數其實是個快遞員
……
以為這樣就完了?——當然不!
由於本例查詢結果的得分是數值,數據中也不存在重複值,因此這樣的多條件查詢問題,我們還可以使用聚合函數。
8,SUMIFS函數▼
解法8:SUMIFS函數 ▼
=TEXT(SUMIFS(D:D,A:A,F2,C:C,G2),"0;;查無")
如果SUMIFS函數查無結果,會返回0,此時使用TEXT函數將0值轉換為查無——這裡就需要注意一下實際數據是否確實存在0值的歧義問題。
9,SUM函數▼
解法9:SUM函數 ▼
=TEXT(SUM(($A$2:$A$40=F2)*($C$2:$C$40=G2)*$D$2:$D$40),"0;;查無")
10,SUMPRODUCT函數▼
解法10:SUMPRODUCT函數 ▼
=TEXT(SUMPRODUCT(($A$2:$A$40=F2)*($C$2:$C$40=G2),$D$2:$D$40),"0;;查無")
11,MMULT函數▼
解法11:MMULT函數 ▼
=TEXT(MMULT(TRANSPOSE($D$2:$D$39),1*($A$2:$A$39&$C$2:$C$39=TRANSPOSE((F2&G2)))),"0;;查無")
12,CONCAT函數▼
解法12:CONCAT函數 ▼
=TEXT(CONCAT(IF(F2&G2=$A$2:$A$40&$C$2:$C$40,$D$2:$D$40,"")),"0;;;查無")
13,TEXTJOIN函數▼
解法13:TEXTJOIN函數 ▼
=TEXT(TEXTJOIN("",1,IF(F2&G2=$A$2:$A$40&$C$2:$C$40,$D$2:$D$40,"")),"0;;;查無")
小貼士:CONCAT和TEXTJOIN需要Excel 2019及以上版本才存在。
……
沒了,今天給大家分享的內容就這樣,左上角點關注右下角點個讚,咱們下期再見。
案例文件下載百度網盤..▼