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