(聲明:本篇文章是為了做實驗,而由 ChatGPT Agent自動產生,AI產生的文章對你仍會有幫助?)

 

為什麼需要 XLOOKUP 和 XMATCH?

🔍 在 Excel 中,搜尋與比對資料一直是常用操作。傳統的 VLOOKUP 和 HLOOKUP 雖然方便,但是有諸多限制:只能從左往右搜尋、插入或刪除欄位會破壞公式、無法回傳左側資料,也不支援反向查找。Excel 在 2020 年提出的 XLOOKUP 和 XMATCH 函數,正是為了改善這些缺點而設計。XLOOKUP 可以在任何方向搜尋,支援精確與模糊匹配,還有錯誤處理;XMATCH 則能取得符合條件的相對位置,不需要再用 MATCH + INDEX 組合,且功能更加完整。

 

XLOOKUP 函數介紹

XLOOKUP 是 Excel 中的一個強大查詢函數,用法彈性高,被視為 VLOOKUP 和 HLOOKUP 的下一代替代品。它的基本詞法如下:

=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
參數 說明
lookup_value 要搜尋的值,可以是單一儲存格、文字、數字,或是由公式產生的結果。
lookup_array 要搜尋的區域,不必局限於表格的第一欄,可以選擇任何一列或一欄作為索引範圍。
return_array 找到匹配值後要回傳的資料範圍。它的大小應與 lookup_array 一致。
[if_not_found] (可選)當搜尋不到符合條件的值時,顯示的自訂訊息或預設值;若忽略此參數,預設會返回錯誤 #N/A。
[match_mode] (可選)用來控制匹配方式:0 為精確匹配(預設);-1 為模糊匹配,回傳小於或等於的最大值;1 回傳大於或等於的最小值;2 支援萬用字元的模糊匹配。
[search_mode] (可選)用來控制搜尋方向:1 為從第一筆開始往下搜尋(預設);-1 從最後一筆往上搜尋;2 進行二分搜尋(升凸),-2 進行二分搜尋(降凸)。

通過 match_mode 與 search_mode 這兩個參數,XLOOKUP 能處理大多數查表的需求,例如往回搜尋、進行區間值查找或加速搜尋速度。

 

XLOOKUP 實際範例

以下是一個範例,我們有一份產品資料表,包含產品代號、名稱與價格,我們希望輸入代號就能查到對應的名稱和價格:

代號 (A列) 產品 (B列) 價格 (C列)
P001 無線滑鼠 350
P002 藍牙鍵盤 650
P003 監視器 4990
P004 外接硬碟 2200
P005 耳機 780

假設要在儲存格 E2 輸入代號,並在 F2 顯示產品名稱、G2 顯示價格,可使用:

=XLOOKUP(E2, A2:A6, B2:B6, "找不到產品")  // 查詢產品名稱
=XLOOKUP(E2, A2:A6, C2:C6, "找不到價格")  // 查詢價格

當輸入「P003」時,兩個公式會分別返回「監視器」和「4990」。如果輸入不存在的代號,例如 P100,則會顯示「找不到產品」與「找不到價格」。

還有一些進階應用,例如:

  • 使用萬用字元找尋包含某字串的品名: =XLOOKUP("*\u6ed1\u9f20*", B2:B6, C2:C6, , 2) 會返回第一個品名含「滑鼠」的價格。
  • 反向搜尋: =XLOOKUP(P002, A2:A6, B2:B6, , , -1) 會從資料表底部開始找尋對應值,適用於資料存在重複值且想取得最後一筆的情況。
  • 區間比對:若價格列表為區間上限,可利用 match_mode=-1 取得小於或等於的區段。

 

XMATCH 函數介紹

XMATCH 則是 MATCH 函數的升級版,它返回符合搜尋條件的項目在範圍中的相對位置。它的強化之處在於支援模糊匹配、萬用字元,以及多種搜尋方向,讓我們不必通過 INDEX + MATCH 組合即可完成複雜查找。

其基本詞法如下:

=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])
參數 說明
lookup_value 要搜尋的目標值,可為文字、數字或邏輯值。
lookup_array 要搜尋的區域,它可以是一列或一欄,也可以是一個集合。
[match_mode] (可選)與 XLOOKUP 相同,可選擇精確匹配或模糊匹配:0 為精確匹配(預設);-1 為小於或等於;1 為大於或等於;2 為支援萬用字元。
[search_mode] (可選)控制搜尋方向:1 從首筆開始、-1 從最後一筆開始、2 使用二分搜尋(升凸)、-2 二分搜尋(降凸)。

 

XMATCH 實際範例

假設同樣有上面的產品代號表,我們想知道某個代號在清單中的位置,例如代號 P003 是清單中的第幾筆:

=XMATCH("P003", A2:A6, 0)  // 返回 3

透過 XMATCH 得到的位置,可結合 INDEX 函數快速取得對應欄位的資料:

=INDEX(B2:B6, XMATCH("P003", A2:A6))  // 返回監視器

XMATCH 也可以配合條件模糊匹配,例如取得最後一個價格小於 1000 的產品代號:

=XMATCH(1000, C2:C6, -1)  // 返回 5,代表耳機位於第 5 筆

與以往的 MATCH 最大差異在於 XMATCH 對萬用字元和搜尋方向的支援,讓我們可以輕鬆處理更複雜的查找邏輯。

 

XLOOKUP 與 XMATCH 的結合應用

在資料分析或動態報表中,XLOOKUP 與 XMATCH 可以互相搭配使用。以下是一個應用場景:我們有成績表,希望查找某學生的分數,同時取得他的名次。

學生 (A列) 分數 (B列)
阿宏 88
怡蒲 95
志明 72
佩真 88
小威 68

我們可以用以下公式查詢:

  • 查詢分數:
    =XLOOKUP("6021", A2:A6, B2:B6) // 返回怡蒲的分數為 95
  • 查詢名次:
    =XMATCH(XLOOKUP("6021", A2:A6, B2:B6), SORT(B2:B6,,-1))
    此公式先利用 XLOOKUP 取得怡蒲的分數,再使用 XMATCH 在降凸排序後的分數序列中找出其排名。

如果我們需要對表格做動態篩選與排序,例如在銷售報表中随意切換產品類型與區域,也可以用 XMATCH 找出相對位置後再傳遞至 XLOOKUP 或 INDEX,建立靈活的儀表板。

 

常見問題與注意事項

儘管 XLOOKUP 和 XMATCH 功能強大,仍有幾點要注意:

  1. 這兩個函數僅支援新版 Excel (Microsoft 365 或 2021);较舊的版本可能無法使用。
  2. match_mode 選擇為 2 時,會啟用萬用字元(*?)匹配,此時必須確保 lookup_value 為文字;若輸入數字,可能產生意外結果。
  3. 使用二分搜尋(search_mode=2 或 -2)時,需要確保 lookup_array 已排序,否則回傳結果可能不正確。
  4. 當 return_array 與 lookup_array 尺寸不一致時,會回傳 #VALUE! 錯誤;請務必保持兩者維度相同。
  5. 在大型資料集上進行大量查詢時,XLOOKUP 的效率優於傳統函數,但仍建議避免在 volatile 函數或陣列公式中重複呼叫,以免影響效能。

善用 XLOOKUP 與 XMATCH,可以簡化工作表的維護與公式撰寫,尤其是在處理跨表格、跨工作表的查找時特別便利。

經由這篇教學,你應該能對 XLOOKUP 及 XMATCH 的用法有更完整的認識。無論是在學術譜稿、公司報表,或是個人記帳與名單整理,都能嘗試使用這兩個函數來提升效率,讓 Excel 不再只是靜態資料的呈現工具,而是智慣型的資料查詢利器。

文章標籤
全站熱搜
創作者介紹
創作者 vincent 的頭像
vincent

學不完.教不停.用不盡

vincent 發表在 痞客邦 留言(0) 人氣(378)