---
title: XMATCH – ฟังก์ชันค้นหาตำแหน่งข้อมูลขั้นสูง
url: https://www.thepexcel.com/functions/excel/lookup-and-reference/xmatch/
type: function-explainer
program: Excel
syntax: "=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])"
date: 2025-12-18
scores:
  popularity: 8
  difficulty: 5
  usefulness: 9
---

# XMATCH – ฟังก์ชันค้นหาตำแหน่งข้อมูลขั้นสูง

> ค้นหาตำแหน่งของข้อมูลในช่วงด้วยความยืดหยุ่นและความเร็วสูง

## คำอธิบาย

XMATCH คืนค่าตำแหน่งของข้อมูลที่ค้นหาในช่วงหรืออาร์เรย์ ถือเป็นฟังก์ชันรุ่นใหม่ที่ Microsoft พัฒนามาแก้จุดอ่อนของ MATCH โดยเฉพาะเรื่องค่า Default ที่เป็น Exact Match แทน Approximate Match ทำให้ใช้ง่ายและปลอดภัยกว่ามาก นอกจากนี้ยังรองรับการค้นหาย้อนกลับ Binary Search สำหรับข้อมูลขนาดใหญ่ และการค้นหาแบบ Wildcard ทำให้ยืดหยุ่นกว่า MATCH เดิมหลายเท่า

## Syntax

```excel
=XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])
```

**excel**

```excel
=XMATCH(lookup_value, lookup_array)
```

ค้นหาแบบตรงทั้งหมดจากต้นถึงท้าย (ค่าเริ่มต้น)

**excel**

```excel
=XMATCH(lookup_value, lookup_array, 0, -1)
```

ค้นหาย้อนกลับจากท้ายไปต้น เพื่อหาค่าที่ตรงกันล่าสุด

**excel**

```excel
=XMATCH(lookup_value, lookup_array, 2)
```

ค้นหาแบบ Wildcard โดยใช้ * และ ? ในการจับคู่รูปแบบ

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| lookup_value | Yes | any |  | ค่าที่ต้องการค้นหา สามารถเป็นตัวเลข ข้อความ วันที่ หรือค่าตรรกะ |
| lookup_array | Yes | range |  | ช่วงหรืออาร์เรย์ที่ต้องการค้นหา ต้องเป็นช่วงแถวหรือคอลัมน์เดียว |
| match_mode | No | number | 0 | โหมดการจับคู่: 0 = ตรงทั้งหมด (ค่าเริ่มต้น) -1 = ตรงทั้งหมด หรือค่าที่เล็กกว่าที่ใกล้เคียงที่สุด 1 = ตรงทั้งหมด หรือค่าที่ใหญ่กว่าที่ใกล้เคียงที่สุด 2 = ค้นหาแบบ Wildcard โดย * ? และ ~ มีความหมายพิเศษ |
| search_mode | No | number | 1 | โหมดการค้นหา: 1 = ค้นหาจากต้นไปท้าย (ค่าเริ่มต้น) -1 = ค้นหาจากท้ายไปต้น (ย้อนกลับ) 2 = ค้นหาแบบไบนารีจากน้อยไปมาก (ต้องเรียงข้อมูลจากน้อยไปมาก) -2 = ค้นหาแบบไบนารีจากมากไปน้อย (ต้องเรียงข้อมูลจากมากไปน้อย) |

## เคสการใช้งาน

### ค้นหาตำแหน่งสินค้าในรายการ

ใช้ XMATCH ร่วมกับ INDEX เพื่อค้นหาข้อมูลสินค้าจากรหัสหรือชื่อสินค้า แทน VLOOKUP ที่มีข้อจำกัด

_เหมาะกับ:_ lookup-function

### หาข้อมูลล่าสุดในรายการซ้ำ

ใช้ search_mode = -1 เพื่อค้นหาย้อนกลับและหาตำแหน่งสุดท้ายของข้อมูลที่ซ้ำกัน เช่น ธุรกรรมล่าสุดของลูกค้า

_เหมาะกับ:_ data-analysis

### ค้นหาเร็วในข้อมูลขนาดใหญ่

ใช้ search_mode = 2 หรือ -2 เพื่อค้นหาแบบไบนารี ซึ่งเร็วกว่าการค้นหาปกติมาก เหมาะสำหรับข้อมูลหลักพันหรือหลักหมื่นแถว

_เหมาะกับ:_ performance

### ค้นหาข้อความบางส่วน

ใช้ match_mode = 2 พร้อม Wildcard (* และ ?) เพื่อค้นหารหัสสินค้าหรือชื่อที่ตรงกับรูปแบบบางส่วน

_เหมาะกับ:_ text-processing

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: ค้นหาตำแหน่งพนักงานจากรหัส

```excel
=XMATCH("EMP005", EmployeeIDs)
```

**ผลลัพธ์:** `5`

สมมติว่าเรามี Named Range ชื่อ EmployeeIDs ซึ่งเป็นช่วงเซลล์ที่มีรหัสพนักงานทั้งหมด
.
สูตรค้นหารหัส "EMP005" ในช่วง EmployeeIDs และคืนค่าตำแหน่งที่ 5 (หาก "EMP005" อยู่ลำดับที่ 5 ในช่วง)
.
ที่เจ๋งคือ XMATCH จะทำ Exact Match ให้อัตโนมัติ ไม่ต้องมานั่งกังวลเหมือน MATCH ที่ Default เป็น Approximate Match แล้วได้ผลลัพธ์ผิดๆ 😅

### 2. ตัวอย่างที่ 2: ใช้ร่วมกับ INDEX เพื่อค้นหาชื่อพนักงาน

```excel
=INDEX(EmployeeNames, XMATCH("EMP005", EmployeeIDs))
```

**ผลลัพธ์:** `สมชาย ใจดี`

สมมติว่าเรามี 2 Named Range:
- EmployeeNames: ช่วงเซลล์ที่มีรายชื่อพนักงาน
- EmployeeIDs: ช่วงเซลล์ที่มีรหัสพนักงาน
.
สูตรทำงาน 2 ขั้นตอน:
1. XMATCH ค้นหารหัส "EMP005" ในช่วง EmployeeIDs และคืนค่าตำแหน่ง
2. INDEX ดึงค่าจากช่วง EmployeeNames ตามตำแหน่งที่ XMATCH คืนค่ามา
.
คอมโบนี้แทน VLOOKUP ได้เลยครับ แถมยังยืดหยุ่นกว่าอีก เพราะค้นหาได้ทุกทิศทาง ไม่จำกัดว่าข้อมูลต้องอยู่ทางซ้ายหรือขวา 😎

### 3. ตัวอย่างที่ 3: ค้นหาย้อนกลับเพื่อหาธุรกรรมล่าสุด

```excel
=INDEX(TransactionAmounts, XMATCH("CUST001", CustomerIDs, 0, -1))
```

**ผลลัพธ์:** `15000`

สมมติว่าเรามี 2 Named Range:
- TransactionAmounts: ช่วงเซลล์ยอดซื้อ
- CustomerIDs: ช่วงเซลล์รหัสลูกค้า (มีรหัสซ้ำได้)
.
สูตรค้นหา "CUST001" โดยใช้ search_mode = -1 (ค้นหาจากล่างขึ้นบน) เพื่อหาธุรกรรมล่าสุด:
1. XMATCH ค้นหาจากล่างขึ้นบน หาตำแหน่งสุดท้ายที่มีรหัส "CUST001"
2. INDEX ดึงยอดซื้อจาก TransactionAmounts ของธุรกรรมนั้น
.
ฟีเจอร์นี้เจ๋งมากครับ MATCH เดิมทำไม่ได้แบบนี้ ต้องมาใช้ Array Formula ซับซ้อนอลหม่าน 😅 แต่ XMATCH ทำให้ง่ายขึ้นเยอะเลย

### 4. ตัวอย่างที่ 4: ค้นหาแบบ Wildcard

```excel
=XMATCH("PD*", ProductCodes, 2)
```

**ผลลัพธ์:** `3`

สมมติว่าเรามี Named Range ชื่อ ProductCodes ซึ่งเป็นช่วงเซลล์รหัสสินค้า
.
สูตรใช้ match_mode = 2 เพื่อค้นหาแบบ Wildcard:
- "PD*" หมายถึงรหัสที่ขึ้นต้นด้วย "PD" ตามด้วยอักขระใดก็ได้
- สูตรคืนค่า 3 คือตำแหน่งแรกที่พบรหัสขึ้นต้นด้วย PD
.
ใช้ Wildcard pattern ได้เหมือน COUNTIF หรือ SUMIF เลยครับ * = อะไรก็ได้กี่ตัวก็ได้, ? = ตัวอักษร 1 ตัว 💡

### 5. ตัวอย่างที่ 5: ค้นหาเร็วด้วย Binary Search

```excel
=XMATCH(25000, SalesDataSorted, 0, 2)
```

**ผลลัพธ์:** `8245`

สมมติว่าเรามี Named Range ชื่อ SalesDataSorted ซึ่งเป็นช่วงเซลล์ยอดขายที่เรียงจากน้อยไปมากแล้ว
.
สูตรใช้ search_mode = 2 (Binary Search แบบน้อยไปมาก):
- ค้นหายอดขาย 25,000 ใน SalesDataSorted ที่เรียงลำดับแล้ว
- Binary Search เร็วมากกกก เหมาะสำหรับข้อมูลหลักพัน-หลักหมื่นแถว
.
⚠️ **ข้อควรระวัง:** ต้องแน่ใจว่าข้อมูลเรียงลำดับอย่างถูกต้อง มิฉะนั้นจะได้ผลลัพธ์ผิดโดยไม่มี error ขึ้นเตือน!

## ข้อควรระวังเรื่อง Performance

สำหรับข้อมูลขนาดใหญ่ (มากกว่า 1,000 แถว) ที่เรียงลำดับแล้ว แนะนำให้ใช้ Binary Search (search_mode = 2 หรือ -2) เพื่อเพิ่มความเร็วในการค้นหาอย่างมาก

## บริบทเพิ่มเติม

ต้องใช้ Excel for Microsoft 365, Excel 2024, Excel 2021 หรือ Excel for the web ไม่รองรับใน Excel 2019 หรือเวอร์ชันเก่ากว่า

## หมายเหตุเพิ่มเติม

💡 **Tip จากผม:** XMATCH เป็นหนึ่งในฟังก์ชันที่ผมชอบที่สุดใน Excel 365 เลยครับ ตอนแรกก็ไม่ค่อยเห็นประโยชน์ว่าต่างจาก MATCH ยังไง แต่พอลองใช้ Binary Search กับข้อมูลหลักหมื่นแถว... ต่างกันชัดเจนมาก! 🚀
.
**เคล็ดลับการใช้งาน:**

1️⃣ **ใช้คู่กับ INDEX แทน VLOOKUP**
วิธีนี้ยืดหยุ่นกว่า VLOOKUP มาก ค้นหาได้ทุกทิศทาง ไม่จำกัดว่าข้อมูลต้องอยู่ทางซ้ายหรือขวา แถมถ้ามีคนเพิ่ม/ลบคอลัมน์ สูตรก็ไม่พัง 😎

2️⃣ **ใช้ search_mode = -1 หาข้อมูลล่าสุด**
เคสที่ใช้บ่อย: มีรายการธุรกรรมของลูกค้าหลายรายการ อยากได้ธุรกรรมล่าสุด → ค้นหาย้อนกลับจบเลย ไม่ต้องเขียน Array Formula ซับซ้อน

3️⃣ **Binary Search สำหรับข้อมูลใหญ่**
ถ้าข้อมูลเกิน 1,000 แถว และเรียงลำดับอยู่แล้ว ใช้ search_mode = 2 หรือ -2 จะเร็วขึ้นมหาศาล แต่ต้องแน่ใจว่าข้อมูลเรียงถูกต้อง ไม่งั้นจะได้ผลผิดโดยไม่มี error เตือน!

4️⃣ **Wildcard Search แทน SEARCH/FIND**
ใช้ match_mode = 2 ค้นหารูปแบบได้ เช่น "AB*" หารหัสที่ขึ้นต้นด้วย AB, "???-2024" หารหัสที่ลงท้าย -2024 และมี 3 ตัวอักษรข้างหน้า
.
⚠️ **ข้อควรระวัง:**
- ค่า Default เป็น Exact Match (ต่างจาก MATCH) ดีตรงไม่ต้องกังวลเรื่อง Approximate Match
- Binary Search ต้องข้อมูลเรียงถูกต้อง 100% ไม่งั้นได้ผลผิด
- lookup_array ต้องเป็นแถวหรือคอลัมน์เดียว ถ้าเป็นช่วง 2 มิติจะ #N/A
.
โดยรวมแล้ว ถ้ามี Excel 365 ผมแนะนำให้ใช้ XMATCH แทน MATCH เลยครับ ทั้งปลอดภัยกว่า ยืดหยุ่นกว่า และเร็วกว่า 💪

## คำถามที่พบบ่อย

**Q: XMATCH ต่างจาก MATCH อย่างไร?**

XMATCH เป็นฟังก์ชันรุ่นใหม่ที่ Microsoft สร้างมาแก้จุดอ่อนของ MATCH เลยครับ
.
ข้อดีที่เด่นชัด:
1️⃣ ค่า Default เป็น Exact Match (MATCH เป็น Approximate Match ซึ่งทำให้เจอ bug บ่อยมาก 😅)
2️⃣ ค้นหาย้อนกลับได้ (search_mode = -1) เหมาะหาข้อมูลล่าสุด
3️⃣ รองรับ Binary Search เร็วมากสำหรับข้อมูลใหญ่
4️⃣ ค้นหาแบบ Wildcard ได้ (* และ ?)
5️⃣ ไม่ต้องเรียงข้อมูลสำหรับ Approximate Match
.
โดยรวมแล้วใช้ง่ายกว่าและปลอดภัยกว่า MATCH หลายเท่าเลยครับ 😎

**Q: เมื่อไหร่ควรใช้ XMATCH แทน VLOOKUP?**

ส่วนตัวผมแนะนำให้ใช้ INDEX+XMATCH แทน VLOOKUP เลยครับ ในกรณีเหล่านี้:
.
✅ **ควรใช้ INDEX+XMATCH เมื่อ:**
1️⃣ ต้องการค้นหาจากคอลัมน์ที่ไม่ใช่คอลัมน์ซ้ายสุด (VLOOKUP ทำไม่ได้)
2️⃣ ต้องการป้องกันสูตรพังเมื่อมีการเพิ่ม/ลบคอลัมน์
3️⃣ ต้องการค้นหาย้อนกลับหรือใช้ Binary Search
4️⃣ ต้องการความยืดหยุ่นในการระบุช่วงข้อมูลอย่างอิสระ
.
จริงๆ แล้ว VLOOKUP เหมาะสำหรับงานค้นหาง่ายๆ ที่ไม่ซับซ้อนเท่านั้น ถ้าทำงานกับข้อมูลใหญ่หรือซับซ้อน INDEX+XMATCH จะดีกว่าเยอะครับ 💡

**Q: ต้องมี Excel เวอร์ชันไหนถึงจะใช้ XMATCH ได้?**

XMATCH ใช้ได้เฉพาะ:
- Excel for Microsoft 365
- Excel 2024
- Excel 2021
- Excel for the web
.
❌ **ใช้ไม่ได้ใน:** Excel 2019 หรือเวอร์ชันเก่ากว่า
.
ถ้าใช้ Excel เวอร์ชันเก่าอยู่ ก็ต้องใช้ MATCH แบบดั้งเดิมแทนครับ แต่ถ้ามีโอกาสอัปเกรด แนะนำให้ลองใช้ Excel 365 นะครับ ได้ XMATCH, XLOOKUP และฟังก์ชันใหม่ๆ อีกเพียบ 😎

**Q: Binary Search ใน XMATCH เร็วกว่าการค้นหาปกติมากแค่ไหน?**

เร็วกว่า**มากกกก**ครับ ยิ่งข้อมูลเยอะยิ่งได้เปรียบ 🚀
.
**เปรียบเทียบความเร็ว:**
- ข้อมูล 1,000 แถว → เร็วกว่า ~10 เท่า
- ข้อมูล 10,000 แถว → เร็วกว่า ~100 เท่า
- ข้อมูล 100,000 แถว → เร็วกว่าหลายร้อยเท่า!
.
⚠️ **ข้อแม้สำคัญ:** ข้อมูล**ต้องเรียงลำดับถูกต้อง**ก่อนใช้
- search_mode = 2 → ต้องเรียงน้อยไปมาก
- search_mode = -2 → ต้องเรียงมากไปน้อย
.
ถ้าข้อมูลไม่ได้เรียง จะได้ผลลัพธ์ผิดโดยไม่มี error เตือน ระวังตรงนี้มากครับ! 😅

**Q: XMATCH คืนค่า #N/A เมื่อไหร่?**

XMATCH จะคืนค่า #N/A ในกรณีเหล่านี้:
.
❌ **สาเหตุที่เจอบ่อย:**
1️⃣ ไม่พบข้อมูลที่ค้นหา (กรณี match_mode = 0)
2️⃣ ใช้ Binary Search กับข้อมูลที่ไม่ได้เรียงลำดับ
3️⃣ lookup_array ไม่ใช่ช่วงแถวหรือคอลัมน์เดียว (เป็นช่วง 2 มิติ)
4️⃣ ค่า match_mode หรือ search_mode ไม่ถูกต้อง
.
💡 **วิธีแก้:** ใช้ IFERROR หรือ IFNA ครอบไว้
```
=IFERROR(XMATCH(...), "ไม่พบข้อมูล")
```
.
แบบนี้จะได้ข้อความแจ้งเตือนที่อ่านง่ายกว่า #N/A ครับ 😊

## ฟังก์ชันที่เกี่ยวข้อง

- [HLOOKUP – ค้นหาข้อมูลแนวนอนในตาราง](https://www.thepexcel.com/functions/excel/lookup-and-reference/hlookup/)
- [IFERROR – ดักจับ Error และเปลี่ยนเป็นค่าอื่น](https://www.thepexcel.com/functions/excel/logical/iferror/)
- [IFNA – แทนค่าเมื่อพบ #N/A Error](https://www.thepexcel.com/functions/excel/logical/ifna/)
- [INDEX – ดึงค่าจากตำแหน่งที่ระบุใน Range หรือ Array](https://www.thepexcel.com/functions/excel/lookup-and-reference/index/)
- [MATCH – ค้นหาตำแหน่งของค่าในรายการ](https://www.thepexcel.com/functions/excel/lookup-and-reference/match/)
- [SEARCH – ค้นหาตำแหน่งของคำ (ไม่สนตัวพิมพ์ และใช้ Wildcard ได้)](https://www.thepexcel.com/functions/excel/text/search/)
- [VLOOKUP – ฟังก์ชันค้นหาค่าแนวตั้งจากตาราง](https://www.thepexcel.com/functions/excel/lookup-and-reference/vlookup/)
- [XLOOKUP – ฟังก์ชันค้นหาข้อมูลแนวตั้งและแนวนอน](https://www.thepexcel.com/functions/excel/lookup-and-reference/xlookup/)

## แหล่งข้อมูลเพิ่มเติม

- [Microsoft Support: XMATCH function](https://support.microsoft.com/en-us/office/xmatch-function-d966da31-7a6b-4a13-a1c6-5a33ed6a0312) _(documentation)_
- [Exceljet: XMATCH function](https://exceljet.net/functions/xmatch-function) _(tutorial)_
- [XLOOKUP vs INDEX and MATCH - Exceljet](https://exceljet.net/articles/xlookup-vs-index-and-match) _(tutorial)_
- [ExcelJet](https://exceljet.net/excel-functions/excel-xmatch-function) _(guide)_

---

_Source: [https://www.thepexcel.com/functions/excel/lookup-and-reference/xmatch/](https://www.thepexcel.com/functions/excel/lookup-and-reference/xmatch/)_
