認識這對搭檔,解決90%的查詢問題

在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根據定位來返回指定位置的值,你學會了嗎?

推薦:人工智能時代的必學技能


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章