VLOOKUP 函數(shù),你所不知道的用法

相信不少人看到標(biāo)題泥从,立即嗤之以鼻句占,VLOOKUP 誰不會(huì)?是的躯嫉,大家都會(huì)纱烘,但用的好的人不多。相信我祈餐,這篇文章一定可以算得上通俗易懂凹炸,又有深度的一篇文章,熟練掌握本文所講內(nèi)容昼弟,一定會(huì)在日常 Excel 處理時(shí)如魚得水啤它。

預(yù)備知識(shí)

Excel 數(shù)組

Excel 用 {a,b,c}{a;b;c} 表示數(shù)組。數(shù)組的主要作用是用于有多個(gè)返回值的公式 (數(shù)組公式)或函數(shù)舱痘。我舉一個(gè)必須用數(shù)組公式的例子变骡。假設(shè)有三個(gè)字段,是按行放置的芭逝,我們想進(jìn)行轉(zhuǎn)置塌碌,像下面這樣:

要求用函數(shù)來實(shí)現(xiàn),不能用選擇性粘貼旬盯。正確的答案如下圖(注意數(shù)組函數(shù)最后必須 CTRL+SHIFT+ENTER 三個(gè)鍵同時(shí)按下台妆,否則錯(cuò)誤

注意地址欄是公式有大括號(hào)括起來:{=TRANSPOSE(A2:C2)},這個(gè)是 Excel 數(shù)組公式的標(biāo)志胖翰。

我們可以把數(shù)組簡(jiǎn)單地理解為:Excel 把工作表的某區(qū)域 (Range) 值接剩,按照行列整體在內(nèi)存中存儲(chǔ),并可以方便的再將數(shù)組在工作表的 Range 中進(jìn)行顯示萨咳。

來看一個(gè)操作懊缺,印證和理解一下。在 A1:C3 這個(gè)區(qū)域存放著兩筆信息培他,我們用數(shù)組公式將數(shù)據(jù)放到同樣大小的一塊區(qū)域 E1:G3

將光標(biāo)放到編輯欄鹃两,按下 F9,對(duì)舀凛,你沒有看錯(cuò)俊扳,Excel 對(duì)數(shù)組使用的是域,所以用 F9 來解析猛遍,我們發(fā)現(xiàn)馋记,編輯欄變成了這樣:

地址欄的數(shù)據(jù)為:

 {"ID","姓名","地址";"001","Stone","Wuhan";"002","Tom","England"}

如果我們這么寫看起來就更清晰了:

 { "ID","姓名","地址"; 
   "001","Stone","Wuhan";
   "002","Tom","England"
 }

這是一個(gè)二維的數(shù)組碎绎。我們可以看到,行數(shù)據(jù)用逗號(hào)分隔(水平數(shù)組)抗果,列數(shù)據(jù)用分號(hào)分割(垂直數(shù)組)独悴。剛才的操作可以這樣解釋:Excel 把 A1:C3 的數(shù)據(jù)拷貝到數(shù)組溜哮,然后再把數(shù)組的數(shù)據(jù)拷貝到 E1:G3椒袍。那么秦士,這樣操作的作用是什么呢蒋伦?注意咐汞,這個(gè)是理解后續(xù)函數(shù)操作的關(guān)鍵:我們之所以要用數(shù)組公式把數(shù)據(jù)放到數(shù)組中卒落,就是為了在需要在函數(shù)中要用到 Excel Range 的地方栖秕,也可以用數(shù)組來代替墩划,從而獲得某種靈活性√楦眨現(xiàn)在不理解,不著急乙帮,后面有例子說明杜漠。

數(shù)組的運(yùn)算

如果把某個(gè)值和一個(gè)數(shù)組進(jìn)行運(yùn)算,那么這個(gè)值會(huì)和數(shù)組中的每一個(gè)元素(或稱每一項(xiàng))進(jìn)行運(yùn)算察净。如果將兩個(gè)數(shù)組進(jìn)行運(yùn)算驾茴,那么數(shù)組中的每個(gè)對(duì)應(yīng)位置的元素都會(huì)執(zhí)行某種運(yùn)算。這種運(yùn)算規(guī)律非常像線性代數(shù)的矩陣運(yùn)算氢卡。

舉個(gè)例子:

IF 函數(shù)高級(jí)用法

IF 除了返回一個(gè)單值锈至,還可以返回一個(gè)數(shù)組。此時(shí) IF 函數(shù)的語法如下:

IF({1,0}, range1, range2)

理解:因?yàn)?{1,0} 表示一個(gè)數(shù)組译秦,所以每一個(gè)元素都會(huì)執(zhí)行運(yùn)算峡捡,首先獲取第一個(gè)元素 1, IF 函數(shù)對(duì)不為零的條件筑悴,返回 range1们拙;然后再獲取第二個(gè)元素 0, IF 函數(shù)對(duì) 0,返回 range2阁吝。最后睛竣,函數(shù)再將 range1 和 range2 組合成一個(gè)新的數(shù)組。

舉例: 運(yùn)用 IF 函數(shù)將 ID姓名 兩個(gè)字段改變順序

{=IF({1,0},B1:B3,A1:A3)}

VLOOKUP 基本用法

VLOOKUP 的語法如下:

VLOOKUP(Lookup_value, Table_array, Col_index_num, TRUE/FALSE)
  • Lookup_value: 要查找的值
  • Table_array: 查找的范圍求摇。查找的范圍中射沟, Lookup_value 對(duì)應(yīng)的列(為了表述方便,后面將對(duì)應(yīng)的列稱作關(guān)鍵列)關(guān)鍵列必須處在第一列位置与境。
  • Col_index_num: 查找的列數(shù)验夯。在查找范圍中,要找的值從第一列算起摔刁,所在列的偏移值挥转。比如從 A 算起,如果要在 B 列中查找某值,則列的偏移值為 2绑谣,以此類推党窜。要點(diǎn):查找的列一定要在 Lookup_value 所在列的右邊。
  • 第四個(gè)參數(shù)借宵,如果為 FALSE 或者 0幌衣,表示精確匹配,如果為 TRUE 或者 非零值壤玫,表示模糊匹配

文字描述總是難理解一些豁护,可以參考視頻 VLOOKUP 函數(shù) 來學(xué)習(xí)。

接下來介紹 VLOOKUP 函數(shù)的幾個(gè)比較高級(jí)一點(diǎn)的用法欲间。

向左查找

比如我們要根據(jù) ID 來查找姓名楚里,但不巧 姓名ID 的左邊:

我們前面講過使用 IF 函數(shù)構(gòu)造一個(gè)數(shù)組,通過這個(gè)數(shù)組來改變列的位置猎贴,也講過函數(shù)需要使用 Range 的地方班缎,可以使用數(shù)組來代替。將上面兩個(gè)技術(shù)結(jié)合她渴,就可以達(dá)到目的吝梅。

函數(shù)如下:

=VLOOKUP(E2,IF({1,0},B1:B3,A1:A3),2,0)

函數(shù)理解: IF({1,0},B1:B3,A1:A3) 返回一個(gè)數(shù)組,數(shù)組內(nèi)容為:

{"ID","姓名";"001","Stone";"002","Tom"}

所以 VLOOKUP 函數(shù)利用這個(gè)數(shù)組惹骂,可以在第二列中就開到對(duì)應(yīng)姓名苏携。

多條件查找

比如我們要根據(jù)公司姓名兩個(gè)字段來確定人員對(duì)應(yīng)的補(bǔ)助:

方法是將公司和姓名組合成一個(gè)字段,然后再使用 VLOOKUP 函數(shù):

H2 單元格的函數(shù)為:

{=VLOOKUP(E2&F2,IF({1,0},A1:A5&B1:B5,C1:C5),2,0)}

注意這里必須使用公式數(shù)組对粪,同時(shí)按下 CTRL+SHIFT+ENTER右冻。

VLOOKUP 和 COLUMNS 函數(shù)聯(lián)合起來

比如我們要根據(jù)補(bǔ)助標(biāo)準(zhǔn)來發(fā)放補(bǔ)助,但表的字段太多著拭,補(bǔ)助AJ 列纱扭。如果使用 VLOOKUP 函數(shù),需要計(jì)算 A 到 AJ 的列數(shù)儡遮。

這個(gè)時(shí)候乳蛾,我們可以通過 columns 函數(shù)來幫助我們計(jì)算 A 到 AJ 共計(jì)多少列。columns 函數(shù)的語法如下:

COLUMNS(A:AJ)

結(jié)合 VLOOKUP 函數(shù)用法如下:

=VLOOKUP(AL2,A:AJ,COLUMNS(A:AJ),0)

手寫一個(gè)比 VLOOKUP 更好用的函數(shù)

如果我們覺得 VLOOKUP 函數(shù)復(fù)雜鄙币,或者想按自己的邏輯來增強(qiáng) VLOOKUP 函數(shù)肃叶,我們也可以自定義一個(gè)自定義的函數(shù)。當(dāng)然十嘿,自定義函數(shù)是另一個(gè)話題因惭,可以寫一系列文章。這里绩衷,給出一個(gè)并不是太有意義的實(shí)現(xiàn)蹦魔,比如:

VLOOKUPPRO(lookup_value, range1, range2)

根據(jù) lookup_value 在 range1 中找到 lookup_value, 然后返回 range2 對(duì)應(yīng)的值激率。這樣,不用計(jì)算列數(shù)勿决,一般情況下乒躺,我們也用不到模糊查找,我們使用精確查找低缩。

Public Function VLookupPro(lookup_value As Range, lookup_range As Range, target_range As Range) As Variant
    Dim result As Variant
    Dim table_array1() As Variant
    Dim table_array2() As Variant
    Dim table_array As Variant

    
    Dim firstRow As Long
    Dim lastRow As Long
    Dim usedRng As Range
    Set usedRng = lookup_range.Worksheet.UsedRange
    firstRow = usedRng.Cells(1, 1).Row
    lastRow = usedRng.Cells(usedRng.Rows.Count, 1).Row
    
    ' Populate lookup_range and target_range
    Dim i As Long
    Dim rowCount As Long
    rowCount = lastRow - firstRow + 1
    ReDim table_array1(1 To rowCount)
    ReDim table_array2(1 To rowCount)
    For i = 1 To rowCount
        table_array1(i) = lookup_range.Cells(i, 1).Value
        table_array2(i) = target_range.Cells(i, 1).Value
    Next
   
    ReDim table_array(1 To UBound(table_array1), 1 To 2)
    For i = 1 To UBound(table_array)
       table_array(i, 1) = table_array1(i)
       table_array(i, 2) = table_array2(i)
    Next
    
    result = Application.WorksheetFunction.VLookup(lookup_value.Value, table_array, 2, False)
    VLookupPro = result
End Function

使用方法示例如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嘉冒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子表制,更是在濱河造成了極大的恐慌,老刑警劉巖控乾,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件么介,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡蜕衡,警方通過查閱死者的電腦和手機(jī)壤短,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慨仿,“玉大人久脯,你說我怎么就攤上這事×海” “怎么了帘撰?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)万皿。 經(jīng)常有香客問我摧找,道長(zhǎng),這世上最難降的妖魔是什么牢硅? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任蹬耘,我火速辦了婚禮,結(jié)果婚禮上减余,老公的妹妹穿的比我還像新娘综苔。我一直安慰自己,他們只是感情好位岔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布如筛。 她就那樣靜靜地躺著,像睡著了一般抒抬。 火紅的嫁衣襯著肌膚如雪妙黍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天瞧剖,我揣著相機(jī)與錄音拭嫁,去河邊找鬼可免。 笑死,一個(gè)胖子當(dāng)著我的面吹牛做粤,可吹牛的內(nèi)容都是我干的浇借。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼怕品,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼妇垢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肉康,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤闯估,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后吼和,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涨薪,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年炫乓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了刚夺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡末捣,死狀恐怖侠姑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箩做,我是刑警寧澤莽红,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站邦邦,受9級(jí)特大地震影響船老,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜圃酵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一柳畔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧郭赐,春花似錦薪韩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至观谦,卻和暖如春拉盾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背豁状。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工捉偏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倒得,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓夭禽,卻偏偏與公主長(zhǎng)得像霞掺,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讹躯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容