Applies ToExcel for Microsoft 365 Excel for Microsoft 365 for Mac Excel for the web Excel 2024 Excel 2024 for Mac Excel 2021 Excel 2021 for Mac Excel 2019 Excel 2016 Excel for Windows Phone 10

本主題說明函數上發生錯誤結果最常見的 VLOOKUP 原因,並提供改用 INDEXMATCH 的建議。

提示: 此外,請參閱快速參考卡:VLOOKUP 疑難排解提示,它以方便的 PDF 檔案格式介紹了 #NA 問題的常見原因。 您可以與其他人共用 PDF,或列印此檔案以備日後參考。

問題:查閱值不在 table_array 引數的第一欄中

VLOOKUP 的其中一個限制是,它只能尋找表格陣列最左邊的欄中的值。 如果您的查閱值不在陣列的第一欄中,就會看見 #N/A 錯誤。

在下表中,我們想要擷取羽衣甘藍的銷售數量。

VLOOKUP 中的 #NA 錯誤:查閱值不在表格陣列的第一欄中

#N/A 錯誤是因為查閱值“Kale” 出現在 table_array 引數 A2:C10 的第二欄 (產品) 中。 在這種情況下,Excel 會尋找欄 A,而不是欄 B。

解決方式:您可以將 VLOOKUP 調整為參照正確的欄,以嘗試修正此問題。 如果此方法不可行,請嘗試移動您的欄。 如果您有大型或複雜的試算表,而且儲存格值是其他計算的結果,或者您也許有其他無法移動欄的邏輯原因,則此方法也可能非常不切實際。 解決方法是使用 INDEX 和 MATCH 函數組合,如此一來,不論值位於查閱表格中的哪個位置,都能夠查詢欄中的值。 請參閱下一節。

請考慮改用 INDEX/MATCH

在 VLOOKUP 不能滿足您的需求的許多情況下,INDEXMATCH 是不錯的選擇。 INDEX/MATCH 的主要優點是可以在查閱表格的任何位置查詢欄中的值。 INDEX 會根據其位置從指定的表格/範圍傳回值。 MATCH 則會傳回值在表格/範圍中的相對位置。 在公式中搭配使用 INDEX 和 MATCH,可以指定值在表格/陣列中的相對位置,藉此在表格/陣列中查詢值。

使用 INDEX/MATCH 而不使用 VLOOKUP 時,有數個優點:

  • 使用 INDEX 和 MATCH 時,傳回值不需要與查詢欄在同一欄。 這和 VLOOKUP 不同,VLOOKUP 的傳回值必須位於指定的範圍內。 這有多重要? 若使用 VLOOKUP,您必須知道包含傳回值的欄號。 雖然這看起來並不具有挑戰性,但當您有一個大型表格並且必須計算欄數時,這可能會很麻煩。 此外,如果您要新增/移除表格中的欄,則必須重新計算及更新 col_index_num 引數。 若使用 INDEX 和 MATCH,則無須計算,因為查閱欄與有傳回值的欄不同。

  • 使用 INDEX 和 MATCH 時,您可以指定陣列中的列或欄,或甚至兩者皆指定。 也就是說,您可以透過垂直和水平的方式查詢值。

  • INDEX 和 MATCH 可用來查詢任何欄中的值。 不像在 VLOOKUP 中您只能查詢表格的第一欄中的值,如果您的查閱值在第一欄中、最後一欄中,或兩者之間的任何位置,就能使用 INDEX 和 MATCH。

  • INDEX 和 MATCH 提供對包含傳回值的列進行動態參照的靈活性。這表示您可以將欄新增到表格,並且 INDEX 和 MATCH 將不會出錯。 另一方面,如果您需要將欄新增到表格,VLOOKUP 就會中斷,因為它對表格進行了靜態參照。

  • INDEX 和 MATCH 對相符項目提供更大的彈性。INDEX 和 MATCH 可以尋找完全相符的項目、大於查閱值,或小於查閱值的值。 VLOOKUP 只會尋找與值最接近的相符項目 (根據預設) 或完全相符的項目。 根據預設,VLOOKUP 也假設表格陣列中的第一欄是依字母順序排序,而且假設您的表格不是依照這種方式設定,VLOOKUP 將傳回表格中第一個最接近的相符項目,這可能不是您要尋找的資料。

語法

若要建立 INDEX/MATCH 的語法,您必須從 INDEX 函數使用陣列/參照引數,然後在它之內建立 MATCH 語法的巢狀結構。 格式為:

=INDEX(陣列或參照、MATCH(lookup_value,lookup_array,[match_type])

讓我們用 INDEX/MATCH 取代上述範例中的 VLOOKUP。 語法看起來會像這樣:

=INDEX(C2:C10,MATCH(B13,B2:B10,0))

簡言之,這表示:

=INDEX(傳回 C2:C10 的值,它將 MATCH(羽衣甘藍,這是 B2:B10 陣列中的某個位置,其中傳回值是對應羽衣甘藍的第一個值))

INDEX 和 MATCH 函數可用來取代 VLOOKUP

公式會在 C2:C10 中尋找對應「羽衣甘藍」的第一個值 (在 B7 中),然後傳回 C7 中的值 (100),這是符合羽衣甘藍的第一個值。

問題:找不到完全相符的項目

range_lookup 引數為 FALSE,且 VLOOKUP 無法在您的資料中找到完全相符的項目時,則會傳回 #N/A 錯誤。

解決方式:如果您確定您的試算表中有相關資料存在,但 VLOOKUP 無法找到資料,請花時間確認參照的儲存格沒有隱藏的空格或非列印字元。 此外,也請確認儲存格遵循正確的資料類型。 例如,您應將含有數字的儲存格的格式設定為 [數字],而非 [文字]。

此外。請考慮使用 CLEANTRIM 函數來清除儲存格中的資料。

問題:查閱值小於陣列中的最小值

如果 range_lookup 引數已設為 TRUE,且查閱值小於陣列中的最小值,則會看見 #N/A 錯誤。 TRUE 會尋找陣列中的概略相符項目,然後傳回小於查閱值之最接近的值。

在下列範例中,查閱值為 100,但 B2:C10 範圍中沒有小於 100 的值;因此發生錯誤。

當查閱值小於陣列中的最小值時,VLOOKUP 中的 N/A 錯誤

解決方式

  • 請視需要更正查閱值。

  • 如果您無法變更查閱值,而且在相符的值方面需要更大的彈性,請考慮使用 INDEX/MATCH,而非 VLOOKUP (請參閱本主題之前的章節)。 若使用 INDEX/MATCH,就能查詢大於、小於或等於查閱值的值。 如需有關使用 INDEX/MATCH (而非 VLOOKUP) 的詳細資訊,請參閱本主題中的前一節。

問題:查閱欄未以遞增的順序排序

如果 range_lookup 引數設為 TRUE,且您的其中一個查閱欄未以遞增 (A-Z) 的順序排序,則會看見 #N/A 錯誤。

解決方式

  • 將 VLOOKUP 函數變更為尋找完全相符的項目。 若要這麼做,請將 range_lookup 引數設為 FALSE。 FALSE 不需要排序。

  • 使用 INDEX/MATCH 函數查詢未排序表格中的值。

問題:值是大型的浮點數字

如果您的儲存格中有時間值或包含多位小數的數字,Excel 會基於浮點數精準度的原因傳回 #N/A 錯誤。 浮點數是在小數點之後的數字 (Excel 會將時間值儲存為浮點數)。 Excel 無法儲存含有大量位數浮點數的數字,因此為了讓函數正常運作,系統必須將浮點數四捨五入至 5 個小數位。

解決方式:使用 ROUND 函數將數字四捨五入到五個小數位數,藉此縮短數字。

需要更多協助嗎?

您可以隨時詢問 Excel 技術社群中的專家,或在社群中取得支援。

另請參閱

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。