在excel裏,對於“查找”的實現,vlookup絕對是使用得最爲頻繁的一個函數。
但是,遇到下面問題,vlookup就沒用了。
下面的表格記錄了員工的信息,現在想通過“姓名”查找對應的“工號”。如圖所示,通過輸入不同的姓名,就會返回對應的工號。
在原數據裏,“工號”在A列,“姓名”在B列,如果是通過工號來查詢對應的姓名,用vlookup函數就能秒殺。但現在是通過B列來查詢對應的A列的內容,是發向查詢。
vlookup函數在查詢的時候只能從左往右查詢,且查詢對象所在的列,必須要在查詢區域的第一列,也就是說,只能通過A列來查詢B列或其它列,而不能通過B列來反向查詢A列。
你可能會說了,把原數據裏的A列和B列調換一下順序不就輕易地避開了上面的問題嗎?但是,這樣做原始數據就發生了改變,在工作中很多時候我們拿到的表數據,標題中是會有合併單元格的,這就更限制了列的移動。
像這種反向查詢問題,就必須祭出我們的“大殺器”了:index+match組合,你就可以更靈活地實現查詢。
1.什麼是index?
index函數能根據指定的行號和列號來返回一個值。語法規則如下:
index(單元格區域,第幾行,第幾列)
單元格區域:就是要查找的數據範圍;
第幾行:在查找範圍的第幾行;
第幾列:在查找範圍的第幾列。(其中“第幾列”是可以省略的。)
對index函數有了基本的認識後,下面通過案例來看下如何使用。
沿用上面案例中的員工信息表,現在想要查詢員工“猴子大大”的工號。
要找的工號在A列,姓名“猴子大大”在第7行,所以輸入公式=index($A$2:$A$11 , 7)。
也就是告訴index函數,我們要查找的是A2:A11這個區域的第7行的信息,於是返回了正確的工號(A2002)。
聰明的你肯定發現了端倪:我在這兒是用肉眼來看,然後用手指頭戳着一個一個數,最後才知道猴子大大位於第7航。
那麼,問題就來了。如果數據量非常大,或者要查找的員工非常多,難道我還要靠肉眼來看靠手指來數數嗎?
所以,這時候就得要有一個函數來告訴index,讓它去取第幾個。下面隆重請出index的最佳搭檔:match函數。
2.什麼是match?
match在英文中是匹配的意思,所以大家應該很自然就能想到它的作用就是進行數據匹配。
匹配什麼呢?
就是拿你要查找的值,去指定的區域進行匹配。匹配上了,就會返回目標值所在的單元格位置。它的語法規則是:
match(要查找的值,在哪裏找,是否精確匹配)
要查找的值:就是我們想匹配的值。在這個案例中是姓名“猴子大大”;
在哪裏找:去哪個區域找想匹配的值。在這個案例中就是去哪裏找姓名“猴子大大”,就是要去“姓名”列中找;
是否精確匹配:它有三個選項,-1,0,1。其中,0代表的是精確匹配。在這個案例中是要在“姓名”列精確匹配“猴子大大”,所以選擇的值是0。-1表示查找大於等於“要查找的值”。1表示查找小於等於“要查找的值”。
這個案例中,我們愉快地就寫下了這樣的公式
=match("猴子大大",$B$2:$B$11,0)
返回結果是7,表示匹配到“猴子大大”在姓名列的第7行。
在案例演示中,我們把要查找的猴子大大,放在了單元格H2,所以上面的公式也可以改爲:
=match(H2,$B$2:$B$11,0)
返回的結果同樣也是7。
3.index+mathch搭檔
在最開始的時候,我們靠肉眼來查找來數數。但是現在有了match函數,我們就把這個查找的任務丟給它,讓它來傳遞。因此原本的公式
=index($A$2:$A$11 , 7)
就可以把公式中的7修改成math函數
=index($A$2:$A$11 , match(H2,$B$2:$B$11,0) )
也就是說,使用mathch函數來爲index函數的第二個參數提供值,告訴index要返回的是第幾個值。
所以,通過index+match函數的組合,我們就可以打造一個下面這樣的查詢系統啦。
無論你要查找的範圍有多大,要查找的量有多少,都是秒秒間就能有結果啦。
(動圖中所示的下拉菜單是用“數據驗證”來實現的,有關這個功能的用法,可戳鏈接詳細瞭解)
4.如何實現多條件查找?
上面小試牛刀之後,我們再來進階一下。index+match的最強大的之處是,它們能實現多條件查找。
上面案例演示中,我們先match出猴子大大在B列的位置,然後再用index返回A列對應的值,得出了對應的工號。但是,如果我還想查詢出猴子大大的其它信息呢?如下圖:
除了工號,我還想查其對應的“基本工資”“部門”“籍貫”信息。而且,這些信息與數據源的順序是不一致的。
怎麼寫公式呢?
有人說,那我就用案例一查詢其工號的方法唄,依葫蘆畫瓢分別再寫三個公式,一一來查“基本工資”“部門”“籍貫”信息。
這是一個方法,卻是一個很笨的方法。實際工作中,我們面對的可能是很龐大的數據,要查詢的列會很多,手動地一個列對應一個公式的寫下來,不僅效率低下,還容易出錯。
那有沒有辦法可以只寫一次公式,就能返回所有列的結果嗎?辦法當然是有的。
首先,我們來理清一下:要用index函數來返回值,我們就得告訴它,我們要在指定區域的哪裏去找。如要查詢“工號”,就得告訴它,要去第1列查找;要查找“基本工資”,就得告訴它,要去第6列查找;要查“部門”,就得告訴它,要去第5列查找。那誰來告訴它呢?用match來告訴它。
match不是最擅長匹配嗎?好,就用它來定位位置信息。我們要查詢“工號”,我們就用match來匹配,定位到“工號”在數據源裏,它是位於第1列;要查詢“基本工資”,我們就用match來匹配,定位到“基本工資”在數據源裏,它是位於第6列。
把match得到的位置信息就存儲起來,然後傳給index,index收到定位信息後,就去指定區域對應的位置查詢,於是返回對應值,查詢結束。
好了,思路清楚後,我們在I2單元格寫下公式吧:
=index($A$2:$F$11,
match($H2,$B$2:$B$11,0),
match(I1,$A$1:$F$1,0))
公式解讀:我們要在A2:F11這個區域查找,區域這麼大,在哪裏找呢?給個定位信息吧。好,讓match來告訴你橫座標、縱座標。
根據單元格H2的引用值,用match來匹配“猴子大大”,定位到他所在的行,爲第7行,作爲橫座標。
那縱座標呢?因爲要查他的工號,所以,再用match對“工號”進行匹配,“工號”在數據源A1:A11裏,位於第1列,作爲縱座標。
好了,在A2:F11的這個區域裏第7行第1列交叉處的單元格的值,就爲猴子大大的工號信息。對於 “基本工資”的查找,同理,在指定區域的第7行第6列查找;其它信息,依次類推。
因爲公式還要往右填充,所以,要把單元格H2進行列的鎖定,防止公式在填充過程中發生了列的變化。因此,得出了上面的公式。
再通過“數據驗證”使得H2的單元格內容自由選擇,就能打造一個查詢系統了:
想查詢哪個員工的哪些信息,也就只是眨眼的功夫。
5.總結
通過index+match這對搭檔,我們可以靈活自如地解決90%的查詢問題。match用來定位,index根據定位來返回指定位置的值,你學會了嗎?
推薦:人工智能時代的必學技能