小夥伴們好啊,今天和大家來說說VLOOKUP的那些事兒,深入了解一下VLOOKUP函數,看看這位大衆情人還藏着多少不為人知的秘密。
VLOOKUP函數幾乎成了Excel的代名詞。會用VLOOKUP函數的人一定是Excel高手。
我們公司的财務人員常常說的一句話是:
我現在太忙了,我把基礎表給你,你自己V一下吧。一個字母V就代表了Excel。
1基礎語法
VLOOKUP函數的基礎語法用中文翻譯過來就是
VLOOKUP( 目标值 , 目标區域 , 第幾列 , 查找方式 )。
VLOOKUP函數中的V縮寫于單詞Vertical,表示垂直的,整個函數就是Vertical Look Up,垂直的查找,也就是在目标區域的第一列,縱向查找目标值,然後返回第n列的對應結果。
第4個參數的查找方式有兩種:數字0或FALSE,代表精确匹配;數字1或TRUE,代表模糊匹配。查找區域必須升序,查找的方案也是“二分法”。
這兩種查找方式的原理與MATCH函數完全一緻,不過VLOOKUP比MATCH少了一個-1的參數。
2根據姓名查找等級
先講個故事。
Excel Home論壇有一位版主,曾經也是Excel的“小白”,那時他的工作中有一項是核對人員成本,大概有上千行的數據。
每月的最後幾天需要趕時間做出來,最後隻能發動老婆一起做,每次都是幾乎3個通宵才能完成。
這樣的工作效率實在太低了,于是他下決心尋找高效方法,功夫不負有心人,終于學會了用VLOOKUP函數,于是三天的工作量縮短到半天,後來這位版主慢慢升職到了高管的位置。
這個故事告訴我們,努力工作加班并不能從根本上解決問題,能促使你進步的是一顆“偷懶”的心。
我們用一個案例來展示VLOOKUP函數的最基礎應用。
如上圖所示,C15:E22是數據區域,要查找G15:G16單元格區域中姓名的對應分數等級,可以在H15單元格中輸入以下公式并向下複制到H16單元格。
=VLOOKUP(G15,$C$15:$E$22,3,0)
G15單元格的“許褚”為查找目标值,在C15:E22單元格區域中的第一列,即在C15:C22 單元格區域中查找“許褚”,然後返回C15:E22區域中的第3列的值,即得到分數等級為“B”,最後注意第4個參數數字0,代表精确匹配。
3案例:VLOOKUP完成各種方式的精确查找
如下圖所示,A~G列是基礎數據源,其中A列是部門,B列是員工号,C列是姓名,D~G列是基本工資、績效獎、加班費及總工資。根據這個數據源進行各種方式的精确匹配查找。
❶ 常規查找
先寫一個最基礎的公式,如下圖所示。
根據J3:J5單元格區域的員工号,查詢每個員工号對應的姓名。在K3單元格中輸入以下公式并向下複制到K5單元格。
=VLOOKUP(J3,B:C,2,0)
輸入公式的時候,千萬别忘記第4個參數數字0。在VLOOKUP函數查詢的時候,如果數據源與本案例相似,是從第一行開始一直向下延伸,建議大家使用整列引用,這樣會具有更好的擴展性,并且不影響計算效率。
❷ 文本數字查找
有多少人這樣處理過問題:當有多列數據時,用VLOOKUP函數引用區域,在寫第3個參數的時候,開始去手動數“1,2,3,…,45,46”,然後在第3個參數的位置寫下46。相信很多人都這樣做過,我曾經就是其中一員。接下來看看,如何學會“偷懶”技能。
如下圖所示,在K8單元格中輸入“=VLOOKUP(J8,”,然後用鼠标選中B:G區域,注意這時候不要松開鼠标,鼠标指針為白色空心十字的狀态,仔細看看屏幕上出現了什麼?在鼠标指針右側的地方會顯示“1048576R×6C”,R表示Row,即行的意思,C表示Column,即列的意思。
這說明選擇了1 048 576 行×6列的區域,所以第3個參數不用數,直接寫6就可以了。在不同的Excel版本中,提示行列數顯示的位置和方式不同,有的是在選定區域的左上角,有的僅顯示“6C”,但無論在哪兒,仔細找一找都會找到的。
最後第4個參數0,表示精确匹配,完整公式為:
=VLOOKUP(J8,B:G,6,0)
将公式向下複制到K10單元格,這時出問題了,為什麼後面得到的都是錯誤值,如下圖所示。
再仔細看看數據源,J9和J10單元格的左上角都有個小“綠帽子”,最常見的“綠帽子”一般是這幾種情況:文本型的數字、錯誤值、單元格中的公式與周圍環境不一緻。
這裡明顯不屬于後兩者,所以是文本型數字。VLOOKUP在查詢的時候和MATCH一樣,都是會根據數據類型判斷的,所以要将文本型數字轉化為數值型,“減負”即可。
=VLOOKUP(--J8,B:G,6,0)
如下圖所示,即可得到正确結果。
❸ 查無此人
再次根據員工号查姓名,如下圖所示。
在K13單元格中輸入公式“=VLOOKUP(J13, B:C,2,0)”,并向下複制到K15單元格,然後發現K15單元格返回結果為#N/A,因為原始數據中沒有“209”這個員工号,所以對于錯誤值标注一下“查無此人”,将公式完善為:
=IFERROR(VLOOKUP(J13,B:C,2,0)," 查無此人 ")
❹ 查找一系列值前面都是根據目标值返回一列的結果,如何使用VLOOKUP函數返回n列的信息呢?根據列的變化返回一系列數字,自然想到了COLUMN函數,如下圖所示。在K18單元格中輸入公式:
=VLOOKUP(J18,C:G,COLUMN(B:B),0)
公式需要複制時,别忘記使用“圖釘”,将公式完善,并複制到K18:N20單元格區域。
=VLOOKUP($J18,$C:$G,COLUMN(B:B),0)
這裡必須提示一點,我們根據數據源C列的姓名,返回後面D列的值時,千萬不能将VLOOKUP函數的第3個參數寫成COLUMN(D:D)(它的結果是數字4), 而是要寫為COLUMN(B:B)(它的結果是數字2)。因為我們選擇的區域是C:G,返回的結果是這個C:G區域中的第2列。寫公式的時候需要知道每一步的結果是什麼,公式中要的是什麼。
❺ 逆向查找
如下圖示,根據數據源中C列的姓名,查詢A列的部門和B列的員工号,形成逆向查找,我們先把公式寫出來,然後再詳細講解,在K23單元格中輸入以下公式,并向下向右複制。
=VLOOKUP($J23,IF({1,0},$C$2:$C$9,A$2:A$9),2,0)
這個公式中J23、2、0都是常見的參數,查找區域IF({1,0},$C$2:$C$9,A$2:A$9)是此公式的關鍵,它具體表示什麼意思呢?下面我們對它進行剖析一下。
我們之前講IF函數的時候,已經講過最基礎的用法。這裡來回憶一下。
公式“=IF(1,"a","b")”的結果為“"a"”;公式“=IF(0,"a","b")”返回的結果為“"b"”。那麼數字1相當于TRUE,數字0相當于FALSE。
我們将IF函數的第1個參數變成一個數組“=IF({1,0},"a","b")”,它的結果同樣是一個數組“{"a","b"}”,與IF中的第1個參數是一一對應的關系。
所以IF({1,0},$C$2:$C$9,A$2:A$9) 的結果就是将C2:C9放前面,A2:A9放在後面,構造成一個8行2列的數組,如下圖所示。
這個區域已經構造完了,将它作為VLOOKUP函數的第2個參數。為什麼第3個參數要寫數字2呢?因為構造的區域隻有兩列。
不知道大家有沒有注意一個細節,前面寫公式的時候,我們都是選擇整列引用,而到了這裡卻隻限定了第2行到第9行區域?這是因為在IF函數中,經過 {1,0}的數組運算,如果選擇了整列,那相當于對整列的1 048 576行數據做計算,你想想計算效率能高嗎?
❻ 查找指定列
如下圖所示,根據J列的姓名,查找相應人員對應工資科目的明細,科目信息是根據第27行的标題而定的,我們不知道要查找的是第幾列,遇到這種情況該怎麼辦呢?可以考慮用MATCH函數。在K28單元格中輸入公式:
=VLOOKUP($J28,$C:$G,MATCH(K$27,$C$1:$G$1,0),0)
将公式向下向右複制,千萬别忘記用“圖釘”,另外還有幾個方面需要注意。
(1)MATCH函數的第2個參數不能随手寫為$1:$1。“MATCH(K$27,$1:$1,0)”的結果返回的是4,整個公式是指從C:G區域中返回第4列的值,不是我們要查找的内容。前面我們選擇的區域是C列到G列,為了簡單一些,我們把查找标題的範圍也限制在C列到G列,所以公式就是“$C$1:$G$1”。
(2)有的讀者認為“,0),0)”部分重複了,于是公式寫到“VLOOKUP($J28,$C:$G,MATCH (K$27,$C$1:$G$1,0))”這裡就結束了。這樣的公式并不完整,前面的0是MATCH函數的,而不是VLOOKUP函數的。初學函數,務必把每一個參數寫全,用來保證工作的準确性。
❼ 通配符查找
我們來查找第一個姓黃的人員的總工資,公式為:
=VLOOKUP(" 黃 *",C:G,5,0)
返回結果為“8 400”,注意,公式中第3個參數的數字5不是數出來的,而是選擇區域的時候,按住鼠标不放,自動标識出來的。
查找第一個姓黃的且姓名為兩個字的人員的總工資,公式為:
=VLOOKUP(" 黃 ?",C:G,5,0)
返回結果為“6 890”,對應的是“黃忠”的總工資。
好了,今天的内容就是這些,希望對你有所幫助。
圖文作者:翟振福
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!