EXCEL VLOOKUP終極教學:基本用法+多條件範例、#NA排除等

vlookup用法教學

VLOOKUP 全名為 「Vertical Lookup」,也就是垂直往下找資料的意思,雖然也有 HLOOKUP 以及 XLOOKUP 的存在,但是因為 VLOOKUP 大家用習慣了,因此使用頻率非常高,是職場上不可不學的30個函數之一。

本文整理了 VLOOKUP 的用法範例、跨工作表 / 檔案操作、多條件、回傳多筆資料、比對兩工作表差異等進階用法、以及如何排除 #NA 等常見錯誤。一步步帶你了解如何使用,並馬上應用到工作中,大幅提升工作效率。

那麼我們就開始吧!

VLOOKUP 函數基本用法

以下是 VLOOKUP 函數的語法說明:

=VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])
引數名稱解釋
lookup_value指定查找資料的名稱儲存格位置
table_array選定欲查找之範圍
col_index_num想回傳第幾欄?
[range_lookup]0:完全符合/1:部分符合(選填)

使用範例:假設 A 欄是學生姓名,B 欄是分數。我們要查找「吳芝正」,並回傳分數,VLOOKUP 函數可以這樣寫:

=VLOOKUP("吳芝正",A:B,2,0)
引數名稱解釋範例
lookup_value指定查找資料的名稱或儲存格位置“吳芝正”
table_array選定欲查找之範圍A:B
col_index_num想回傳第幾欄?2
[range_lookup]0:完全符合/1:部分符合(選填)0

如果還是不太懂的話,那我們來各個了解 VLOOKUP 的4個引數的規則與限制。


一、lookup_value(指定查找資料名稱)

第一個引數要輸入欲查找資料的「名稱」或是「儲存格位置」。

我們在 E2 中輸入「=VLOOKUP」,並且接著選定要查找的儲存格「D2」(或者輸入”吳芝正”):

=VLOOKUP(D2,
=VLOOKUP("吳芝正",

二、table_array(選定查找範圍)

第二個引數,我們可以選定查找的範圍,告訴 EXCEL:我要在這個範圍中找到第一個引數輸入的資料。這個範圍可以在同一張工作表內,不同工作表,甚至是不同的活頁簿(檔案)之間

接續前面的例子,我想要查找的範圍是該工作表的 A 到 B 欄,因此 VLOOKUP 函數的第二個引數就要拉一個「A:B」:

=VLOOKUP(D2,A:B,

注意!VLOOKUP 有個很強硬的限制:第一個引數一定要在查找範圍的最左邊。沿用前面的範例,既然我們第一個引數輸入了「吳芝正」,那範圍就一定得要從姓名的欄位開始拉,否則就會回傳 #N/A!

=VLOOKUP("吳芝正",A:C,3,0) //顯示#N/A!

三、col_index_num(選定回傳第幾欄)

選完範圍之後,我們就要告訴 EXCEL 要回傳範圍中的第幾欄

在這個例子中,我想要回傳的是學生的分數,也就是範圍中的第 2 欄,那麼我就要輸入「2」:

=VLOOKUP(D2,A:B,2,

注意!是「範圍中的第幾欄」,而不是「在這張工作表的第幾欄」!是相對位置的概念,不是絕對位置。


四、[range_lookup](完全符合/部分符合)

第 4 個引數,我們要確認資料的比對方式,要「完全符合」還是「部分符合」:

  • 完全符合:輸入 0 / FALSE
  • 部分符合:輸入 1 / TRUE / 不輸入

以下會分別解釋「完全符合」和「部分符合」的用法與差異。

完全符合(0 或 FALSE)

基本上,大多數情況都適用「完全符合」,也就是 VLOOKUP 查找資料名稱時一定要找一字不差的值,直到找到後才會回傳值。

這也代表資料名稱一定要存在而且名稱相同,就算差了一個空格也不行,否則就會回傳 #N/A!,發生找不到相符資料的情況。

要設定完全符合,我們只要在 VLOOKUP 的第4個引數輸入「0」或者「FALSE」就可以了:

=VLOOKUP(D2,A:B,2,0)

部分符合(1 或 TRUE)

部分符合就比較複雜了。部分符合的邏輯是:找出最接近且小於等於查找資料的「數值」

使用範例:假設我們今天想要知道用 400 塊最多能買到幾入的馬桶清潔碇,那麼我們就可以利用「部分符合」找出最接近 400 的值並且回傳數量。以下為詳細的步驟:

STEP. 1:我們先將網路上蒐集到的定價貼在 EXCEL 上(A 與 B 欄)。

STEP. 2:用 EXCEL 的「排序與篩選」功能將資料的 A 欄由小到大排序。

注意!將資料由小到大排序非常重要,否則 VLOOKUP 最後回傳的值會是錯的。(因為 VLOOKUP 的查找邏輯是垂直由上往下找,只要找到超過 400 的值就停止查找,所以我們必須要將資料由小到大排序)

STEP. 3:將資料由小到大排序之後,就可以在 VLOOKUP 的第 4 個引數中輸入「1」或是「TRUE」囉:

=VLOOKUP(D2,A:B,2,1)

設定「部分符合」 的 VLOOKUP 函數會先找到最接近且小於等於 400 的值,也就是本例的「399」,接著再回傳 B 欄的「30入」。


VLOOKUP 不同工作表 / 不同檔案查找資料

VLOOKUP 函數在「跨工作表」與「跨檔案」的操作其實跟在同一個工作表的步驟一模一樣

可以參考以下的 GIF :

詳細操作步驟為:

  1. 輸入 VLOOKUP 函數
  2. 第一個引數:點一下「吳芝正」。
  3. 第二個引數:直接換到另一個工作表,拉想要查找的範圍(記得欲查找的資料一定要在範圍的最左邊)。
  4. 第三個引數:輸入要回傳範圍中的第幾欄。
  5. 第四個引數:輸入0(完全符合)或1(部分符合)。
  6. 按下Enter
引數名稱解釋範例
lookup_value指定查找資料的名稱或儲存格位置B3 或 “吳芝正”
table_array選定欲查找之範圍全校成績單!B:C(「全校成績單」工作表的 B 到 C 欄)
col_index_num想回傳第幾欄?2
[range_lookup]0:完全符合/1:部分符合(選填)0

而跨 EXCEL 檔案的操作也一樣,輸入第 2 個引數時直接換到另一個 EXCEL 檔案拉範圍就好


VLOOKUP 進階用法 1 – 多條件查找資料(兩欄條件)

假設我們今天有各家服飾單品的價格,但我們今天想要回傳同時符合「GOOPI」與「帽T」的價格。我們可以怎麼做呢?

其實我們只要「將 2 欄併成 1 欄」,VLOOKUP 就可以一次查找 2 個條件的資料。

Step.1:我們先在資料左邊新增一欄「廠牌&單品」的欄位。

Step.2:利用 CONCAT 函數(舊稱 CONCATENATE)合併廠牌與單品的名稱:

=CONCAT(B2,"-",C2)

Step.3:最後再利用 VLOOKUP 查找連結後的資料名稱就可以一次查找兩個條件了:

=VLOOKUP("GOOPI-帽T",A:D,4,0)

VLOOKUP 進階用法 2 – 多條件查找資料(十字條件)

有時候資料一多起來,我們會不知道 VLOOKUP 到底該回傳第幾個欄位,如下圖:

如果想要查找同時符合「RO逆滲透濾水器」以及「Aug」的資料,可以怎麼做呢?

其實,我們可以利用 VLOOKUP+MATCH 函數,直接回傳 8 月的資料,而不需要數出 8 月在第幾欄。

Step. 1:利用 MATCH 函數先算出「Aug」位於範圍中的第幾個欄位:

=MATCH("Aug",A1:M1,0)

Step. 2:取得「Aug」位於第幾個欄位後,將這段 MATCH 函數丟進 VLOOKUP 回傳欄位的引數中:

=VLOOKUP("RO逆滲透濾水器",A1:M6,MATCH("Aug",A1:M1,0),0)

VLOOKUP 進階用法 3 – 回傳多筆資料

一般情況下,VLOOKUP 只會回傳一筆資料。

但如果你的 EXCEL 是支持「動態陣列」版本(2021 或 365 以上),就可以利用動態陣列一次回傳多個欄位!

使用範例:利用 VLOOKUP 回傳「李大華」的「部門」「薪水」

=VLOOKUP("李大華",A:C,{2,3},0)

{ 2,3 } 表示「先回傳第 2 欄,再回傳第 3 欄」。而如果要回傳更多筆資料,直接在矩陣裡面繼續新增欄位即可:

使用範例:利用 VLOOKUP 回傳「李大華」的「部門」「薪水」「評級」

=VLOOKUP("李大華",A:D,{2,3,4},0)

VLOOKUP 進階用法 4 – 比對兩個工作表差異

我們可以利用 VLOOKUP 找不到完全符合的資料名稱時,會回傳 #N/A 的原理,來找兩筆資料的差異。

使用範例:假設現在有資料 A 與資料 B 兩筆資料,我們想要確認資料 B 中的每一筆資料在資料 A 中有沒有出現過:

Step. 1:在資料 B 的比對結果中,輸入 VLOOKUP 函數,來查找資料 A 中的「apple」,並回傳第 1 欄:

=VLOOKUP(A2,資料A!A:A,1,0)

Step. 2:接著,將 VLOOKUP 函數丟進 ISNA 函數,將「#N/A」回傳「TRUE」,將「非 #N/A」回傳 FALSE:

=ISNA(VLOOKUP(A2,資料A!A:A,1,0))

Step. 3:再把 ISNA 放進 IF 函數的第一個引數中,讓 IF 函數去判斷如果為 TRUE,則回傳「X」,否則回傳「V」。

=IF(ISNA(VLOOKUP(A2,資料A!A:A,1,0)),"X","V")

VLOOKUP 函數排除 #N/A 方法

以下列舉了我遇到的 4 種出現 #N/A 的原因與解決方法,如果你有發現其他可能導致 #N/A 的原因,也都非常歡迎留言和我說。

可能性 1:VLOOKUP 確實查無相符資料,有可能是因為資料打錯字而沒有發現。

解決方法:針對出現#N/A的資料名稱片段,利用尋找與取代功能(CTRL+F)去確認是否有相符資料。


可能性 2:資料中有出現多餘空格而沒有發現(如文字的最後面),造成「有資料卻找不到」的情況出現。

解決方法:用 TRIM 函數將多餘的空格移除後再查找。

=TRIM(A3)

可能性 3:VLOOKUP 的查找範圍最左邊並不是要查找的資料。

解決方法:重新設定函數,要查找的資料一定要在查找範圍的最左邊。


可能性 4:可能是資料格式的問題。如 GA4 下載的數據有時候 VLOOKUP 就是找不到。(這個真的會發瘋)

解決方法:建議可以開啟新的欄位或工作表,並且用「=A1」、「=A2」、「=A3」,或者結合 TEXT 或 VALUE 函數將資料傳到其他的地方。


VLOOKUP 常見錯誤(#N/A、#REF! 、#VALUE!)

  • #N/A:指 VLOOKUP 函數找不到對應的資料,此時應該注意大小寫、字之間的空白格,或者確定欲查找的資料名稱確實存在。
  • #REF!:通常發生在 col_index_num 的值> table_array 欄數,或者原本的資料有遭到更動或刪除過。
  • #VALUE!:通常發生在 col_index_num 的值 <1時,或者 [range_lookup] 沒有辦法被有效判讀是 TRUE 還是 FALSE。

VLOOKUP 溫馨提醒

  • 如果資料是呈水平排序,可以將資料旋轉貼上(又稱轉置)再執行 VLOOKUP,或者使用 HLOOKUP 函數
  • 在輸入下一個引數時記得加上「,」
  • 如果有重複的資料名稱,VLOOKUP 只會回傳第一個找到的資料
  • 選取範圍時,要特別留意有沒有欄位被隱藏

參考資料

16 則留言

  1. 請問若有多個分頁要搜尋對應的資料的加總,但不是每個分頁都有資料的話
    要如何設立公式呢
    公式是
    =IFERROR(vlookup($B1,’分頁1′!$B:$D,3,0)+vlookup($B1,’分頁2′!$B:$D,3,0)+vlookup($B1,’分頁3′!$B:$D,3,0)
    但如果其中一個分頁沒有B1的值,則計算不正確 跳#N/A
    再麻煩協助解惑,謝謝

    • Hi~
      當VLOOKUP查找不到其中一個分頁的B1,就會跳#N/A,而當其中一個VLOOKUP是#N/A時,整串的加總都會變成#N/A。
      所以,我們要該要針對每個個別的VLOOKUP都設定一層IFERROR(如果出現錯誤,則回傳0),確保每一個VLOOKUP出來的值都是可以被加總的。

      修改後的函式會長這樣喔:
      =IFERROR(VLOOKUP($B1,分頁1!$B:$D,3,0),0)
      +IFERROR(VLOOKUP($B1,分頁2!$B:$D,3,0),0)
      +IFERROR(VLOOKUP($B1,分頁3!$B:$D,3,0),0)

  2. 如果有重複的資料名稱,vlookup 只會回傳第一個找到的資料====如果我想要回傳有符合的資料應該怎麼做?例如:找Apple,對應有1,3,3,3,6,6我希望能得到1,3,6該怎麼設定?

    • Hi~
      首先可以用「FILTER」函數:

      我們假設A欄是水果(有Apple、Banana…),B欄是對應數字。
      這時候我們在C1輸入=FILTER(B:B,A:A=”Apple”),就會在C欄顯示 1,3,3,3,6,6
      ※函數解釋:請篩選出A欄符合”Apple”的資料,並且回傳對應的B欄。

      接著,我們用UNIQUE函數去掉重複的值:

      在FILTER函數的外面包上一層UNIQUE,像這樣=UNIQUE(FILTER(B:B,A:A=”Apple”)),就會在C欄只顯示1,3,6了。
      ※函數解釋:去掉 1,3,3,3,6,6 中重複的值。

      而且FILTER跟UNIQUE函數有個優點:他們都是浮動函數
      A、B欄資料變動時,C欄會自動跟著調整,完全不需要多做什麼(只要記得寫UNIQUE函數的那一格儲存格以下的所有儲存格都盡量不要有資料)

      以上,可以再針對自己的需求去微調,希望有幫助到你!

    • Hi~

      我平常會用2種方法,一種是VLOOKUP,一種是用COUNTIF

      VLOOKUP:
      直接打VLOOKUP之後,有資料的就是有相同數字或名稱,如果#NA就表示沒有相同數字或名稱。
      假設要找A工作表【A欄】與B工作表【A欄】兩欄中相同的數字或名稱
      我會先在A工作表【B欄】全部都先打上”V”,接著再去B工作表的【B欄】用VLOOKUP查找A工作表(=VLOOKUP(B工作表A1,A工作表的A到B欄,2,0))
      如果顯示”V”,則代表A工作表跟B工作表有相同數字或名稱,顯示#NA則沒有相同的數字或名稱

      COUNTIF:
      這個就比較難,主要是利用COUNTIF數出要對照的工作表有幾個重複資料(=COUNTIF(B工作表A1,A工作表A欄)),如果有重複資料照道理說COUNTIF算出來的數量會是1以上
      接著再用IF函數設定如果COUNTIF大於0,則顯示”V”,等於0就顯示”X”

      如果需要更簡單的方法,我覺得可以想辦法用EXCEL中【條件式格式設定】裡面的【醒目提示儲存格規則】的【重複的值】,EXCEL就會將範圍中相同的資料用特殊顏色標註起來~

      希望有幫助到妳!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

點擊打開目錄