HI,大家好,我是星光。
今天給大家分享的表格技巧是MATCH函數(shù)。在英文中,它的意思是匹配,常用于搭配其它函數(shù),實(shí)現(xiàn)數(shù)據(jù)查詢與統(tǒng)計(jì)等。
在之前一篇推文「函數(shù)語(yǔ)法這樣記就簡(jiǎn)單了」,咱們聊到MATCH函數(shù)是個(gè)腦細(xì)胞很簡(jiǎn)單的黑老大,動(dòng)不動(dòng)就問(wèn)人你算老幾。
比如說(shuō),以下公式返回結(jié)果為6,表示'看見星光'在A列第6個(gè)出現(xiàn),所以算老六。
=MATCH('看見星光',A:A,0)
MATCH函數(shù)的基本語(yǔ)法▼
=MATCH(查找值,查找范圍,匹配方式)MATCH函數(shù)一共有3個(gè)參數(shù),第1個(gè)參數(shù)是查找值,第2個(gè)參數(shù)是單行或者單列的查找范圍,第3個(gè)參數(shù)是查找方式。查找方式又分為3種,絕大部分情況下,我們只會(huì)用到其中一種,也就是將它固定設(shè)置為0,表示零失誤精確匹配。
以下舉5個(gè)小栗子,一窺
MATCH函數(shù)最常用的幾種情景。
▎1,判斷數(shù)據(jù)是否存在
如下圖所示,需要在C列編寫函數(shù)公式,判斷B列的數(shù)據(jù)是否存在于A列。
參考公式如下:
公式看不全可以左右拖動(dòng)...
=IF(ISNUMBER(MATCH(B2,A:A,0)), '存在','不存在')MATCH函數(shù)計(jì)算B2單元格的內(nèi)容在A列算老幾。如果查有所得,返回一個(gè)數(shù)值序列號(hào),比如2,如果查無(wú)匹配,則返回錯(cuò)誤值。
再用ISNUMBER函數(shù)對(duì)MATCH的計(jì)算結(jié)果進(jìn)行判斷,如果是數(shù)值則返回'存在',否則返回'不存在'。
=IF(COUNTIF(A:A,B2), '存在','不存在')這題也可以使用如上所示的COUNTIF函數(shù):但通常并不推薦。不推薦的原因是……往下看
▎2,等級(jí)轉(zhuǎn)換
如下圖所示,C列是評(píng)定,需要在D列編寫函數(shù)公式,將其轉(zhuǎn)換為等級(jí)形式。其中優(yōu)秀為1級(jí),良好為2級(jí),及格為3級(jí),不及格為4級(jí),勸退為5級(jí)。
參考公式如下:
公式看不全可以左右拖動(dòng)...
=MATCH(C2, {'優(yōu)秀','良好','及格','不及格','勸退'}, 0)&'級(jí)' MATCH函數(shù)會(huì)返回查找值在查找范圍中算老幾,剛好符合本題的序列等級(jí)的特性。這函數(shù)的查找范圍是一個(gè)單行的常量數(shù)組,C2單元格的'及格',在該常量數(shù)組中序列為3,計(jì)算結(jié)果即為'3級(jí)'。
▎3,判斷是否重復(fù)
如下圖所示,需要在C列編寫函數(shù)公式,判斷B列的姓名是否重復(fù)出現(xiàn)(第2次及以上出現(xiàn)為重復(fù),首次為不重復(fù))。
參考公式如下:
公式看不全可以左右拖動(dòng)...
=IF( MATCH(B2,B$2:B$15,0)=ROW(A1), '','重復(fù)')MATCH函數(shù)返回B2的內(nèi)容在B2:B15區(qū)域首次出現(xiàn)時(shí)的序列號(hào)。例如,B2單元格的'看見星光'首次出現(xiàn)時(shí)序列為1。然后判斷該結(jié)果,是否和自然序列號(hào)相等。如果相等,則為首次出現(xiàn),否則為重復(fù)出現(xiàn)。
如下圖所示,C列是自然序列,D列是MATCH函數(shù)返回的序列。
該案例也可以使用以下公式:
=IF(COUNTIF(B$2:B2,B2)=1, '','重復(fù)')但COUNTIF屬于全遍歷函數(shù),它會(huì)從頭到尾把所有的數(shù)據(jù)都找一遍,計(jì)算效率偏低,而MATCH函數(shù)屬于找到即止型,當(dāng)找到第一個(gè)目標(biāo)結(jié)果后,就不會(huì)再往下匹配計(jì)算了。另外,當(dāng)MATCH函數(shù)的查找范圍相同時(shí),系統(tǒng)會(huì)建立引用緩存,避免反復(fù)調(diào)取單元格對(duì)象,計(jì)算效率屬于函數(shù)世界中的佼佼者。
▎4,逆向查詢
MATCH函數(shù)經(jīng)常和INDEX函數(shù)搭配使用,可以解決逆向查詢的問(wèn)題。
如下圖所示,A:C列是成績(jī)表,需要在F列編寫函數(shù)公式,查詢E列人名所屬的班級(jí)。
參考公式如下:
公式看不全可以左右拖動(dòng)...
=INDEX(A:A,MATCH(F2,B:B,0))MATCH函數(shù)返回F2單元格的內(nèi)容在B列首次出現(xiàn)時(shí)的序列,INDEX按圖索驥,返回A列對(duì)應(yīng)序列的結(jié)果。
和VLOOKUP等函數(shù)一樣,MATCH函數(shù)也支持使用通配符。以下公式可以返回B列姓名包含E列關(guān)鍵字的所屬班級(jí):
=INDEX(A:A, MATCH('*'&E2&'*',B:B,0))
▎5,交叉表查詢
MATCH函數(shù)也經(jīng)常搭配VLOOKUP等函數(shù)實(shí)現(xiàn)動(dòng)態(tài)標(biāo)題查詢。
如下圖所示,A~D是數(shù)據(jù)源,需要根據(jù)F列的人名和G1:H1區(qū)域的標(biāo)題名稱查詢對(duì)應(yīng)的成績(jī)。
G2單元格輸入以下公式,復(fù)制填充到G2:H10區(qū)域。
=VLOOKUP($F2,$A:$D, MATCH(G$1,$A$1:$D$1,0),0)
聯(lián)系客服