MATCH คืนเลขลำดับตำแหน่งของค่าที่ค้นหาในช่วงข้อมูลแถวเดียวหรือคอลัมน์เดียว รองรับการค้นหา 3 โหมด คือ Exact Match (0) ที่ไม่ต้องเรียงข้อมูล, Approximate Match แบบ Less Than or Equal (1) ที่ต้องเรียงจากน้อยไปมาก, และ Greater Than or Equal (-1) ที่ต้องเรียงจากมากไปน้อย รองรับ Wildcard (* และ ?) ในโหมด Exact Match และมักใช้คู่กับ INDEX เป็นรูปแบบ INDEX-MATCH ที่ยืดหยุ่นกว่า VLOOKUP
=MATCH(lookup_value, lookup_array, [match_type])
=MATCH(lookup_value, lookup_array, [match_type])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| lookup_value | Any | Yes | ค่าที่ต้องการค้นหา รองรับข้อความ, ตัวเลข, วันที่, ค่าตรรกะ (TRUE/FALSE), หรืออ้อิงเซลล์ ข้อความยาวไม่เกิน 255 ตัวอักษร ไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ (case-insensitive) ยกเว้นใช้กับ EXACT | |
| lookup_array | Range | Yes | ช่วงข้อมูลที่จะค้นหา ต้องเป็นแถวเดียว (เช่น A1:E1) หรือคอลัมน์เดียว (เช่น A1:A10) เท่านั้น รองรับ Table References (เช่น Products[Name]) และ Named Ranges ไม่รองรับช่วงข้อมูล 2 มิติ (เช่น A1:E10) | |
| match_type | Number | Optional | 1 | ประเภทการจับคู่: 0 = Exact Match (หาค่าตรงทุกตัวอักษร ไม่ต้องเรียงข้อมูล รองรับ Wildcard), 1 = Less Than or Equal (หาค่ามากที่สุดที่ = lookup_value ต้องเรียงจากมากไปน้อยก่อน) ค่าเริ่มต้นคือ 1 แนะนำให้ใส่ 0 เสมอเพื่อความปลอดภัย |
ใช้ MATCH หาตำแหน่งแล้วให้ INDEX ดึงค่า ทำให้สามารถค้นหาจากขวาไปซ้าย (VLOOKUP ทำไม่ได้), ค้นหาแบบ Two-Way (แนวนอนและแนวตั้ง), และเร็วกว่า VLOOKUP ในชุดข้อมูลขนาดใหญ่ เป็นรูปแบบที่ผู้เชี่ยวชาญ Excel แนะนำให้ใช้แทน VLOOKUP เสมอ
ใช้ MATCH กับ match_type=1 เพื่อหาช่วงที่เหมาะสมจากตารางเกณฑ์ เช่น คะแนน 75 อยู่ในช่วง 70-80 ได้เกรด B, รายได้ 650000 อยู่ในช่วง 500000-1000000 เสียภาษี 15%, ยอดขาย 1.2M ได้คอมมิชชั่น 5% เหมาะกับระบบที่มีการจัดช่วง (brackets) ต้องเรียงข้อมูลจากน้อยไปมาก
ใช้ MATCH กับ match_type=0 และ Wildcard (* และ ?) เพื่อค้นหาข้อความที่ตรงบางส่วน เช่น หาสินค้าที่ขึ้นต้นด้วย Pro*, หารหัสที่ลงท้ายด้วย *-2025, หาชื่อที่มี 4 ตัวอักษร (????) มีประโยชน์ในการค้นหาแบบยืดหยุ่นเมื่อไม่ทราบข้อความเต็ม
ใช้ MATCH เพื่อเช็คว่าค่าที่กรอกเข้ามาอยู่ใน List ที่กำหนดหรือไม่ ถ้า MATCH คืน #N/A แสดงว่าไม่อยู่ในรายการ ถ้าคืนเลขตำแหน่ง แสดงว่าอยู่ในรายการ ใช้ใน Data Validation, ตรวจสอบรายการอนุมัติ, เช็คข้อมูลซ้ำ, หรือสร้าง Dependent Dropdown Lists
ใช้ MATCH หาหมายเลขคอลัมน์ใน VLOOKUP แทนการนับเอง โดยค้นหาชื่อคอลัมน์ในหัวตาราง ทำให้เมื่อมีการแทรกหรือลบคอลัมน์ สูตร VLOOKUP ยังทำงานได้ถูกต้อง ตัวอย่าง: =VLOOKUP(A2, Data, MATCH("Price", Headers, 0), FALSE)
MATCH("Banana", A2:A5, 0)=MATCH("Banana", A2:A5, 0)
3
MATCH(75, B2:B6, 1)=MATCH(75, B2:B6, 1)
3
MATCH("Pro*", A2:A6, 0)=MATCH("Pro*", A2:A6, 0)
4
INDEX(C2:F6, MATCH("Apple", A2:A6, 0), MATCH("Mar", C1:F1, 0))=INDEX(C2:F6, MATCH("Apple", A2:A6, 0), MATCH("Mar", C1:F1, 0))
150
IFERROR(MATCH("Mango", A2:A5, 0), "ไม่พบในรายการ")=IFERROR(MATCH("Mango", A2:A5, 0), "ไม่พบในรายการ")
ไม่พบในรายการ
INDEX(A2:A10, MATCH("EMP-105", B2:B10, 0))=INDEX(A2:A10, MATCH("EMP-105", B2:B10, 0))
Sarah Johnson
IF(ISNA(MATCH(E2, ValidProducts, 0)), "ไม่ถูกต้อง", "ถูกต้อง")=IF(ISNA(MATCH(E2, ValidProducts, 0)), "ไม่ถูกต้อง", "ถูกต้อง")
ถูกต้อง
INDEX(C2:C6, MATCH(A10, A2:A6, 1))=INDEX(C2:C6, MATCH(A10, A2:A6, 1))
20%
MATCH จะคืน #N/A error ใน 3 กรณีหลัก:
.
(1) ไม่พบค่าที่ต้องการใน lookup_array เมื่อใช้ match_type=0
(2) ใช้ match_type=1 แต่ข้อมูลไม่ได้เรียงจากน้อยไปมาก
(3) ใช้ match_type=-1 แต่ข้อมูลไม่ได้เรียงจากมากไปน้อย
.
ในกรณีที่ 2 และ 3 แม้ค่าที่หาจะอยู่ในรายการก็อาจได้ #N/A ถ้าข้อมูลไม่ได้เรียงถูกต้อง 😅
.
แนะนำใช้ IFERROR หรือ IFNA ครอบเพื่อจัดการ error และแสดงข้อความที่เป็นมิตรกับผู้ใช้ครับ
XMATCH (Excel 365 และ Excel 2021 ขึ้นไป) เป็นเวอร์ชันที่ดีกว่า MATCH ในทุกด้านเลยครับ:
.
(1) Default เป็น Exact Match (0) แทนที่จะเป็น 1 ทำให้ปลอดภัยกว่า
(2) รองรับการค้นหาจากท้ายไปหน้า (search_mode=-1)
(3) มี if_not_found argument สำหรับกำหนดค่า default เมื่อไม่พบ แทนที่จะได้ #N/A
(4) รองรับ Binary Search ที่เร็วกว่าในชุดข้อมูลขนาดใหญ่
(5) รองรับ Wildcard mode แยกต่างหาก
.
ถ้าใช้ Excel 365 หรือ 2021 แนะนำให้ใช้ XMATCH แทน MATCH เสมอครับ 😎
match_type มี 3 ค่า:
.
(0) Exact Match – หาค่าตรงทุกตัวอักษร ไม่ต้องเรียงข้อมูล รองรับ Wildcard แนะนำให้ใช้เสมอเมื่อต้องการค้นหาแบบตรงทั้งหมด
.
(1) Less Than or Equal – หาค่ามากที่สุดที่ = lookup_value ต้องเรียงจากมากไปน้อยก่อน ใช้น้อยมาก
.
ค่าเริ่มต้นคือ 1 ซึ่งค่อนข้างอันตรายนะครับ เพราะต้องเรียงข้อมูลก่อน 😅
เพราะค่าเริ่มต้นของ match_type คือ 1 ซึ่งต้องเรียงข้อมูลจากน้อยไปมากก่อน
.
ถ้าข้อมูลไม่ได้เรียงหรือเรียงผิด จะได้ผลผิดพลาดโดยที่ไม่แสดง error ทำให้ยากต่อการดีบักมากครับ 😭
.
การใส่ 0 (Exact Match) อย่างชัดเจนทำให้สูตรปลอดภัยที่สุด เข้าใจง่าย ไม่ต้องกังวลเรื่องการเรียงข้อมูล และยังรองรับ Wildcard ด้วย
.
ผู้เชี่ยวชาญ Excel แนะนำให้ใส่ match_type=0 อย่างชัดเจนเสมอ เว้นแต่จะต้องการใช้ Approximate Match จริงๆ เช่นการจัดเกรดหรือช่วงภาษี
Wildcard ใช้ได้กับ match_type=0 (Exact Match) เท่านั้นนะครับ โดย * แทนตัวอักษรหลายตัว (หรือไม่มีเลย) และ ? แทนตัวอักษรหนึ่งตัว
.
ตัวอย่าง:
– Pro* = หาข้อความที่ขึ้นต้นด้วย Pro
– *2025 = หาข้อความที่ลงท้ายด้วย 2025
– *Pro* = หาข้อความที่มี Pro อยู่ตรงไหนก็ได้
– App?? = หาข้อความที่ขึ้นต้นด้วย App ตามด้วยอักษร 2 ตัว
.
ถ้าต้องการหาเครื่องหมาย * หรือ ? จริงๆ ให้ใช้ tilde (~) นำหน้า เช่น ~* หรือ ~?
INDEX-MATCH เป็นรูปแบบที่ทรงพลังกว่า VLOOKUP มากครับ 😎
.
MATCH ทำหน้าที่หาตำแหน่ง (เลขลำดับ) ของค่าที่ต้องการ จากนั้น INDEX จะใช้ตำแหน่งนั้นเพื่อดึงค่าจากคอลัมน์หรือแถวอื่น
.
รูปแบบพื้นฐาน: =INDEX(return_range, MATCH(lookup_value, lookup_range, 0))
.
ข้อดีคือ:
(1) ค้นหาจากขวาไปซ้ายได้ (VLOOKUP ทำไม่ได้)
(2) Two-Way Lookup ค้นหาทั้งแถวและคอลัมน์พร้อมกัน
(3) เร็วกว่า VLOOKUP ในชุดข้อมูลขนาดใหญ่
(4) ไม่มีปัญหาเมื่อแทรกหรือลบคอลัมน์
ไม่ครับ MATCH ไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ (case-insensitive) ค้นหา Apple, apple, APPLE จะได้ผลเหมือนกัน
.
ถ้าต้องการค้นหาแบบ case-sensitive ต้องใช้ร่วมกับ EXACT โดยใช้รูปแบบ:
=MATCH(TRUE, EXACT(lookup_value, lookup_range), 0)
.
ตัวอย่าง: =MATCH(TRUE, EXACT(“Apple”, A1:A10), 0) จะหา Apple เท่านั้น ไม่หา apple หรือ APPLE
.
วิธีนี้ใช้ EXACT เปรียบเทียบทุกเซลล์ใน lookup_range กับ lookup_value แล้ว MATCH หา TRUE (ซึ่งหมายถึงตรงทุกตัวอักษรรวมตัวพิมพ์)
MATCH เป็นฟังก์ชันพื้นฐานสำหรับการค้นหาที่คืนค่าตำแหน่ง (เลขลำดับ) ของค่าที่ต้องการในช่วงข้อมูลแถวเดียวหรือคอลัมน์เดียว
.
แทนที่จะคืนค่าจริงเหมือน VLOOKUP หรือ XLOOKUP ฟังก์ชันนี้คืนเลขตำแหน่งที่พบค่านั้น ทำให้เหมาะสำหรับใช้คู่กับ INDEX เป็นรูปแบบ INDEX-MATCH ที่ยืดหยุ่นกว่า VLOOKUP มาก
MATCH รองรับ 3 โหมดการค้นหา: Exact Match (0) ค้นหาค่าตรงทุกตัวอักษรและไม่ต้องเรียงข้อมูล, Approximate Match แบบ Less Than or Equal (1) หาค่ามากที่สุดที่น้อยกว่าหรือเท่ากับค่าที่หาและต้องเรียงข้อมูลจากน้อยไปมาก, และ Approximate Match แบบ Greater Than or Equal (-1) หาค่าน้อยที่สุดที่มากกว่าหรือเท่ากับค่าที่หาและต้องเรียงข้อมูลจากมากไปน้อย
.
ฟังก์ชันนี้รองรับ Wildcard (* และ ?) เมื่อใช้โหมด Exact Match (0) เท่านั้น โดย * แทนตัวอักษรหลายตัว และ ? แทนตัวอักษรหนึ่งตัว
MATCH มักถูกใช้ร่วมกับ INDEX เพื่อสร้างสูตรค้นหาที่ยืดหยุ่นกว่า VLOOKUP เพราะสามารถค้นหาจากซ้ายไปขวาหรือขวาไปซ้ายก็ได้ และยังใช้ตรวจสอบว่าค่าอยู่ในรายการหรือไม่ด้วยการเช็คว่า MATCH คืน #N/A หรือเลขตำแหน่ง
.
ถ้าใช้ Excel 365 หรือ Excel 2021 แนะนำให้ใช้ XMATCH แทนครับ เพราะมี default เป็น Exact Match, รองรับการค้นหาจากท้ายไปหน้า, มี if_not_found สำหรับจัดการกรณีไม่พบค่า, และมี Binary Search ที่เร็วกว่า