圍觀的市民劉先生表示:我活了二十多年,看見斗圖的比較多,這么無聊斗Excel使用技巧的第一次見!
為了更好的裝逼,哦!不!是為了更好的分享多條件匹配的技巧,今天和大家分享如何用八種方式實現(xiàn)多條件匹配!
上原始素材!
看到廣州新垣結(jié)衣有種中國梅西、中國郜林斯曼的感覺!
不管那么多了,反正就是原表是名稱、城市、評分表。
現(xiàn)在需要根據(jù)兩個條件得到評分!
我是輕度強迫癥患者,想到什么就想能窮盡解決方案,所以寫這個文章即為分享,也為自己收藏存檔,部分實現(xiàn)方式較難理解。
大大的提醒:1、4、6、7方法比較簡單,只是想了解解決方案的,看這四個中任意一個就好啦,想拓展編程思路的,可以都看看!
方法一:增加輔助列法
常見的Vlookup匹配應(yīng)用只能查找一個單元格,針對多條件的,就是把多個條件都放到一個單元格即可。
原表插入一列作為輔助列,然后輸入=,用本文連接符&連接不同的單元格,合并到一個單元格即可!
查詢列表同理!
最后編寫Vlookup就可以實現(xiàn)!
方法二:Vlookup函數(shù)與數(shù)組重構(gòu)第一式
其實有了第一個方法的思路,第二個方法就是由插入一列輔助列變成使用數(shù)組函數(shù)構(gòu)建一個虛擬的表而已。
公式:{=VLOOKUP(G2&H2,IF({1,0},B1:B9&C1:C9,D1:D9),2,)}
公式兩邊用大括號包裹,說明什么?說明輸入函數(shù)后是同時按住Ctrl Shift Enter結(jié)束的!
為蝦米需要這么復(fù)雜呢?因為我們用到了數(shù)組函數(shù),今天很多公式都是三鍵結(jié)束的。
先解釋一下Vlookup的第一個參數(shù)
G2&H2就是兩個單元格的合并,結(jié)果就是石原里美茂名,和剛剛創(chuàng)建輔助列的效果一樣!
Vlookup第二個參數(shù)是要引用一個區(qū)域,我們在這里是用IF函數(shù)實現(xiàn)搭建一個區(qū)域。
先回想一下IF函數(shù)的用法
IF(判斷條件,為真的時候返回什么,為假的時候返回什么)
{1,0}啥意思呢?其實通俗理解這個就是兩列,第一列的數(shù)字都是1,第二列的數(shù)字都是0。
翻譯成Excel的語言就是將一列變成了兩列
變身后
第一列是:=IF(1,B1:B9&C1:C9,D1:D9)
第二列是:=IF(0,B1:B9&C1:C9,D1:D9)
所以Excel重新幫我們構(gòu)建了一個新的表,這個表的第一列就是名字和城市的組合,第二列是評分。和第一種方法創(chuàng)建輔助列的方式其實是一樣的。
唯一的區(qū)別是方法一是人工實實在在的創(chuàng)建了一個新表,而方法二是通過IF加上數(shù)組函數(shù)虛擬創(chuàng)建了一個表。
方法三:Vlookup函數(shù)與數(shù)組重構(gòu)第二式
本方法和方法二類似,但是構(gòu)建數(shù)組輔助表的時候換了一種形式。
公式:{=VLOOKUP(1,IF({1,0},(B1:B9=G2)*(C1:C9=H2),D1:D9),2,)}
本方法的輔助表變成了每個列等于條件,然后兩個條件相乘。
B1:B9=G2得到的是True和False的數(shù)組
C1:C9=H2得到的同樣是True和False的數(shù)組
True等同于1,F(xiàn)alse等同于0
當(dāng)多條件同時滿足的時候就變成了1,否則就是0
第一列變成了如果兩者均相等才顯示為1,如果有其中任意一個不等都是0,則最終結(jié)果就是0
第二列就是心中評分。
然后Vlookup根據(jù)1查找,則新的輔助表只有兩個條件都相等的時候才是1,否則是0
那只有一個返回值就是6啦!
本案例的精髓在于深刻理解數(shù)組是如何重構(gòu)及重構(gòu)后的表是什么樣子的!
方法四:Lookup大叔實現(xiàn)
Lookup和Vlookup是表親關(guān)系,Lookup雖然使用頻率沒有Vlookup高,但是很多場合Lookup可以更巧妙的解決問題!
Lookup(找什么,在哪里找,如果找到了返回什么)
公式:=LOOKUP(1,0/((B2:B9=G2)*(C2:C9=H2)),D2:D9)
這個公式?jīng)]有大括號哦,普通Enter鍵結(jié)束公式編寫即可!
重要說明一個第二個參數(shù)0/(B2:B9=G2)*(C2:C9=H2)
某列等于某個單元格得到的是True、False數(shù)組,兩個數(shù)組相乘是1、0數(shù)組。
因為數(shù)字0不可以作為分母,如果是分母會報錯!
(B2:B9=G2)*(C2:C9=H2)返回值:{0;0;0;0;0;0;1;0}
0/(B2:B9=G2)*(C2:C9=H2)返回值:{#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;#DIV/0!;0;#DIV/0!}
則Lookup第二個參數(shù)的輔助表只有倒數(shù)第二個有有效數(shù)字,所以只有唯一的返回值了!
備注:本案例最不好理解的是為什么第一個參數(shù)是1,第二個參數(shù)的分子是0!其實第一個參數(shù)可以是任意的數(shù)字,只要大于第二個參數(shù)的分子即可!
為什么一定要這樣呢?
因為Lookup的實現(xiàn)原理是返回輔助表中小于等于第一個參數(shù)數(shù)字對應(yīng)的返回值!
比較拗口!但是是真諦!給你個眼神自行體會!
方法五:Match Index大法!
match和index匹配可以完全實現(xiàn)Vlookup的應(yīng)用,還可以實現(xiàn)反查等Vlookup本身實現(xiàn)不了的匹配功能。
基礎(chǔ)函數(shù)介紹
=Match(查找什么,在哪個列找,0)返回第一個參數(shù)在第二個參數(shù)中的位置
=Index(列,返回該列第幾個值)返回某個列中第N個值
兩個組合就是Vlookup的應(yīng)用咯!
公式:{=INDEX(D2:D9,MATCH(G2&H2,B2:B9&C2:C9,0))}
思路:先獲取查找的內(nèi)容在新的列中屬于第幾位,然后返回評分列對應(yīng)位置的值!
完美!
重點是Match函數(shù)的應(yīng)用,Match第一個參數(shù)就是兩個條件合并,第二個參數(shù)本來應(yīng)該接一個列,本案例我用兩個列相乘,實現(xiàn)了每個列相同位置用文本連接符鏈接在一起,和創(chuàng)建輔助列是一樣的!有上文的鋪墊,我不再累述了!
大大的提醒:下面的方法只適用于返回值是數(shù)字的!如果是返回值是文本,只能用上面的哦!
方法六:Sumifs實現(xiàn)
Sumifs是Sumif的大哥,Sumif只能實現(xiàn)單條件統(tǒng)計求和,Sumifs可以實現(xiàn)N條件統(tǒng)計求和!
=Sumifs(要求和的列,要判斷的列1,判斷條件1,要判斷的列2,判斷條件2......)
公式:=SUMIFS(D2:D9,B2:B9,G2,C2:C9,H2)
比較簡單,不過多解釋咯!
方法七:Sumproduct函數(shù)實現(xiàn)
Sumproduct曾經(jīng)我單獨寫過一篇文章,感興趣可以看一下!
點我查看!
公式:=SUMPRODUCT((B2:B9=G2)*(C2:C9=H2)*D2:D9)
Sumproduct是數(shù)組乘積求和,也不解釋啦,其實看我上面的那個文章就理解了,不懂的留言交流!
方法八:Sum的判斷求和,數(shù)組函數(shù)盲的噩夢!
公式:{=SUM((B2:B9=G2)*(C2:C9=H2)*D2:D9)}
提問:你這個方法和剛才的有咩區(qū)別嗎?
回答:沒有,還是數(shù)組乘積求和!
提問:那你為什么要分享
回答:我就是想湊齊八個!你打我呀?。。。?!
今天就到這里!祝各位明年昨日可以不用自己過七夕!
感謝各位支持!
聯(lián)系客服