Thep Excel

MATCH – ค้นหาตำแหน่งของค่าในรายการ

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])

By ThepExcel AI Agent
14 December 2025

Function Metrics


Popularity
9/10

Difficulty
5/10

Usefulness
10/10

Syntax & Arguments

=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 เสมอเพื่อความปลอดภัย

How it works

INDEX-MATCH แทน VLOOKUP (ค้นหาทุกทิศทาง)

ใช้ MATCH หาตำแหน่งแล้วให้ INDEX ดึงค่า ทำให้สามารถค้นหาจากขวาไปซ้าย (VLOOKUP ทำไม่ได้), ค้นหาแบบ Two-Way (แนวนอนและแนวตั้ง), และเร็วกว่า VLOOKUP ในชุดข้อมูลขนาดใหญ่ เป็นรูปแบบที่ผู้เชี่ยวชาญ Excel แนะนำให้ใช้แทน VLOOKUP เสมอ

จัดช่วงคะแนน เกรด อัตราภาษี (Tiered Systems)

ใช้ MATCH กับ match_type=1 เพื่อหาช่วงที่เหมาะสมจากตารางเกณฑ์ เช่น คะแนน 75 อยู่ในช่วง 70-80 ได้เกรด B, รายได้ 650000 อยู่ในช่วง 500000-1000000 เสียภาษี 15%, ยอดขาย 1.2M ได้คอมมิชชั่น 5% เหมาะกับระบบที่มีการจัดช่วง (brackets) ต้องเรียงข้อมูลจากน้อยไปมาก

ค้นหาข้อความบางส่วนด้วย Wildcard

ใช้ MATCH กับ match_type=0 และ Wildcard (* และ ?) เพื่อค้นหาข้อความที่ตรงบางส่วน เช่น หาสินค้าที่ขึ้นต้นด้วย Pro*, หารหัสที่ลงท้ายด้วย *-2025, หาชื่อที่มี 4 ตัวอักษร (????) มีประโยชน์ในการค้นหาแบบยืดหยุ่นเมื่อไม่ทราบข้อความเต็ม

ตรวจสอบข้อมูล (Data Validation & List Checking)

ใช้ MATCH เพื่อเช็คว่าค่าที่กรอกเข้ามาอยู่ใน List ที่กำหนดหรือไม่ ถ้า MATCH คืน #N/A แสดงว่าไม่อยู่ในรายการ ถ้าคืนเลขตำแหน่ง แสดงว่าอยู่ในรายการ ใช้ใน Data Validation, ตรวจสอบรายการอนุมัติ, เช็คข้อมูลซ้ำ, หรือสร้าง Dependent Dropdown Lists

Dynamic VLOOKUP (หาเลขคอลัมน์อัตโนมัติ)

ใช้ MATCH หาหมายเลขคอลัมน์ใน VLOOKUP แทนการนับเอง โดยค้นหาชื่อคอลัมน์ในหัวตาราง ทำให้เมื่อมีการแทรกหรือลบคอลัมน์ สูตร VLOOKUP ยังทำงานได้ถูกต้อง ตัวอย่าง: =VLOOKUP(A2, Data, MATCH("Price", Headers, 0), FALSE)

Examples

ตัวอย่างที่ 1: Exact Match พื้นฐาน (Foundation)
MATCH("Banana", A2:A5, 0)
สมมติเซลล์ A2:A5 มีข้อมูล: Apple, Orange, Banana, Grape สูตรนี้หาตำแหน่งของ "Banana" แบบ Exact Match โดยใช้ match_type=0 ซึ่งหมายถึงต้องตรงทุกตัวอักษร
.
ผลลัพธ์คือ 3 เพราะ Banana อยู่ในลำดับที่ 3 ของช่วง A2:A5
.
ข้อดีของ match_type=0 คือไม่ต้องเรียงข้อมูลก่อน และไม่สนใจตัวพิมพ์เล็ก-ใหญ่ (ค้นหา banana หรือ BANANA ก็ได้ผลเหมือนกัน) นี่เป็นโหมดที่แนะนำให้ใช้มากที่สุดครับ เพราะปลอดภัยและเข้าใจง่าย 😎
Excel Formula:

=MATCH("Banana", A2:A5, 0)

Result:

3

ตัวอย่างที่ 2: Approximate Match สำหรับจัดเกรด (Practical)
MATCH(75, B2:B6, 1)
สมมติเซลล์ B2:B6 มีเกณฑ์คะแนนเรียงจากน้อยไปมาก: 0, 50, 70, 80, 90
.
เมื่อนักเรียนได้ 75 คะแนน สูตรนี้จะหาค่ามากที่สุดที่น้อยกว่าหรือเท่ากับ 75 ซึ่งคือ 70 อยู่ที่ตำแหน่ง 3 จากนั้นเราก็ใช้ INDEX ดึงเกรดที่สอดคล้องกับตำแหน่งนี้ เช่น C, B, A เป็นต้น
.
การใช้ match_type=1 เหมาะกับการจัดช่วง (brackets) เช่น เกรด, อัตราภาษี, ค่าคอมมิชชั่น, ค่าจัดส่งตามน้ำหนัก
.
แต่ต้องระวังเรียงข้อมูลจากน้อยไปมากก่อนเสมอนะครับ มิเช่นนั้นจะได้ผลผิด 😅
Excel Formula:

=MATCH(75, B2:B6, 1)

Result:

3

ตัวอย่างที่ 3: ใช้ Wildcard ค้นหาข้อความบางส่วน (Advanced)
MATCH("Pro*", A2:A6, 0)
สมมติเซลล์ A2:A6 มีข้อมูล: iPhone 14, iPhone 15, iPad Air, iPhone Pro Max, MacBook Pro
.
สูตรนี้ใช้ Wildcard * เพื่อค้นหาข้อความที่ขึ้นต้นด้วย "Pro" ตามด้วยอะไรก็ได้ (Pro*) จะพบ "iPhone Pro Max" ที่ตำแหน่ง 4
.
Wildcard มี 2 แบบ: * แทนอักษรหลายตัว (หรือไม่มีเลย) และ ? แทนอักษร 1 ตัว เช่น "App??" จะหา Apple, Appie แต่ไม่หา App
.
Wildcard ใช้ได้กับ match_type=0 เท่านั้นนะครับ ถ้าต้องการหาเครื่องหมาย * หรือ ? จริงๆ ให้ใช้ ~* หรือ ~? เช่น MATCH("~*", A1:A10, 0)
Excel Formula:

=MATCH("Pro*", A2:A6, 0)

Result:

4

ตัวอย่างที่ 4: INDEX-MATCH ค้นหาแนวนอนและแนวตั้ง (Advanced)
INDEX(C2:F6, MATCH("Apple", A2:A6, 0), MATCH("Mar", C1:F1, 0))
สมมติตาราง A1:F6 มีชื่อผลไม้ในคอลัมน์ A (Apple, Orange, Banana, Grape, Mango) และชื่อเดือนในแถวแรก (Jan, Feb, Mar, Apr) ด้วยยอดขายในเซลล์ที่เหลือ
.
สูตรนี้ใช้ MATCH 2 ครั้ง: ครั้งแรกหาตำแหน่งแถวของ Apple (สมมติอยู่แถวที่ 1 ของช่วง A2:A6), ครั้งที่สองหาตำแหน่งคอลัมน์ของ Mar (สมมติอยู่คอลัมน์ที่ 3 ของช่วง C1:F1)
.
จากนั้น INDEX จะดึงค่าที่ตำแหน่งแถว 1 คอลัมน์ 3 ของช่วง C2:F6 ซึ่งคือยอดขาย Apple ในเดือน March = 150
.
นี่คือ Two-Way Lookup ที่ VLOOKUP ทำไม่ได้ครับ 😎
Excel Formula:

=INDEX(C2:F6, MATCH("Apple", A2:A6, 0), MATCH("Mar", C1:F1, 0))

Result:

150

ตัวอย่างที่ 5: จัดการกรณีไม่พบค่าด้วย IFERROR (Advanced)
IFERROR(MATCH("Mango", A2:A5, 0), "ไม่พบในรายการ")
สมมติเซลล์ A2:A5 มีข้อมูล: Apple, Orange, Banana, Grape เมื่อค้นหา "Mango" จะไม่พบและ MATCH จะคืน #N/A
.
แทนที่จะแสดง error ให้ผู้ใช้เห็น เราใช้ IFERROR ครอบเพื่อจับ error และแสดงข้อความที่เป็นมิตรกับผู้ใช้แทน
.
วิธีนี้มีประโยชน์มากในการสร้าง Dashboard หรือฟอร์มที่ต้องการให้ดูเป็นมืออาชีพครับ 💡
.
อีกทางเลือกคือใช้ IFNA แทน IFERROR เพื่อจับเฉพาะ #N/A error เท่านั้น (ไม่จับ error อื่น เช่น #REF!, #VALUE!)
Excel Formula:

=IFERROR(MATCH("Mango", A2:A5, 0), "ไม่พบในรายการ")

Result:

ไม่พบในรายการ

ตัวอย่างที่ 6: INDEX-MATCH แทน VLOOKUP (ค้นหาจากขวาไปซ้าย)
INDEX(A2:A10, MATCH("EMP-105", B2:B10, 0))
สมมติคอลัมน์ A มีชื่อพนักงาน และคอลัมน์ B มีรหัสพนักงาน
.
VLOOKUP ไม่สามารถค้นหารหัสในคอลัมน์ B แล้วคืนชื่อจากคอลัมน์ A (ซ้ายกว่า) ได้ แต่ INDEX-MATCH ทำได้ง่ายๆ 😎
.
MATCH หาตำแหน่งของรหัส EMP-105 ในคอลัมน์ B (สมมติอยู่ตำแหน่ง 5) จากนั้น INDEX ดึงค่าจากตำแหน่ง 5 ของคอลัมน์ A ซึ่งคือชื่อ Sarah Johnson
.
นี่คือเหตุผลหลักที่ผู้เชี่ยวชาญ Excel แนะนำให้ใช้ INDEX-MATCH แทน VLOOKUP เพราะยืดหยุ่นกว่า ไม่จำกัดทิศทางการค้นหา และเร็วกว่าด้วย
Excel Formula:

=INDEX(A2:A10, MATCH("EMP-105", B2:B10, 0))

Result:

Sarah Johnson

ตัวอย่างที่ 7: ตรวจสอบว่าค่าอยู่ในรายการหรือไม่ (Data Validation)
IF(ISNA(MATCH(E2, ValidProducts, 0)), "ไม่ถูกต้อง", "ถูกต้อง")
สมมติ Named Range ชื่อ ValidProducts มีรายการสินค้าที่อนุมัติแล้ว เราต้องการตรวจสอบว่าสินค้าที่กรอกในเซลล์ E2 อยู่ในรายการที่อนุมัติหรือไม่
.
MATCH จะพยายามหาค่าใน ValidProducts ถ้าพบจะคืนเลขตำแหน่ง ถ้าไม่พบจะคืน #N/A
.
เราใช้ ISNA ตรวจสอบว่าเป็น #N/A หรือไม่ ถ้าใช่ (ISNA=TRUE) แสดงว่าไม่ถูกต้อง ถ้าไม่ใช่ แสดงว่าถูกต้อง
.
วิธีนี้มีประโยชน์มากในการทำ Data Validation, ตรวจสอบรายการอนุมัติ, หรือเช็คว่ามีข้อมูลซ้ำหรือไม่ครับ 💡
Excel Formula:

=IF(ISNA(MATCH(E2, ValidProducts, 0)), "ไม่ถูกต้อง", "ถูกต้อง")

Result:

ถูกต้อง

ตัวอย่างที่ 8: Approximate Match สำหรับช่วงภาษี (Real-World Complex)
INDEX(C2:C6, MATCH(A10, A2:A6, 1))
สมมติตาราง A2:C6 มีช่วงรายได้และอัตราภาษี: [0, 0%], [150000, 5%], [300000, 10%], [500000, 15%], [1000000, 20%]
.
เมื่อรายได้ในเซลล์ A10 คือ 650000 บาท MATCH จะหาค่ามากที่สุดที่ <= 650000 ซึ่งคือ 500000 (อยู่ตำแหน่ง 4) จากนั้น INDEX ดึงอัตราภาษีจากตำแหน่ง 4 ของคอลัมน์ C ซึ่งคือ 15%
.
นี่คือการใช้ Approximate Match แบบ Progressive Tax Bracket ที่ใช้จริงในบัญชีและการเงินครับ 💡
.
สิ่งสำคัญคือต้องเรียงช่วงรายได้จากน้อยไปมาก (Ascending) ใน lookup_array มิเช่นนั้นจะได้ผลผิดพลาด
Excel Formula:

=INDEX(C2:C6, MATCH(A10, A2:A6, 1))

Result:

20%

FAQs

MATCH คืน #N/A ในกรณีใดบ้าง?

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 และแสดงข้อความที่เป็นมิตรกับผู้ใช้ครับ

ความแตกต่างระหว่าง MATCH และ XMATCH คืออะไร?

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 มีค่าอะไรบ้าง และใช้เมื่อไร?

match_type มี 3 ค่า:
.
(0) Exact Match – หาค่าตรงทุกตัวอักษร ไม่ต้องเรียงข้อมูล รองรับ Wildcard แนะนำให้ใช้เสมอเมื่อต้องการค้นหาแบบตรงทั้งหมด
.
(1) Less Than or Equal – หาค่ามากที่สุดที่ = lookup_value ต้องเรียงจากมากไปน้อยก่อน ใช้น้อยมาก
.
ค่าเริ่มต้นคือ 1 ซึ่งค่อนข้างอันตรายนะครับ เพราะต้องเรียงข้อมูลก่อน 😅

ทำไมควรใส่ match_type=0 เสมอ?

เพราะค่าเริ่มต้นของ match_type คือ 1 ซึ่งต้องเรียงข้อมูลจากน้อยไปมากก่อน
.
ถ้าข้อมูลไม่ได้เรียงหรือเรียงผิด จะได้ผลผิดพลาดโดยที่ไม่แสดง error ทำให้ยากต่อการดีบักมากครับ 😭
.
การใส่ 0 (Exact Match) อย่างชัดเจนทำให้สูตรปลอดภัยที่สุด เข้าใจง่าย ไม่ต้องกังวลเรื่องการเรียงข้อมูล และยังรองรับ Wildcard ด้วย
.
ผู้เชี่ยวชาญ Excel แนะนำให้ใส่ match_type=0 อย่างชัดเจนเสมอ เว้นแต่จะต้องการใช้ Approximate Match จริงๆ เช่นการจัดเกรดหรือช่วงภาษี

Wildcard (* และ ?) ใช้กับ match_type ไหนได้บ้าง?

Wildcard ใช้ได้กับ match_type=0 (Exact Match) เท่านั้นนะครับ โดย * แทนตัวอักษรหลายตัว (หรือไม่มีเลย) และ ? แทนตัวอักษรหนึ่งตัว
.
ตัวอย่าง:
– Pro* = หาข้อความที่ขึ้นต้นด้วย Pro
– *2025 = หาข้อความที่ลงท้ายด้วย 2025
– *Pro* = หาข้อความที่มี Pro อยู่ตรงไหนก็ได้
– App?? = หาข้อความที่ขึ้นต้นด้วย App ตามด้วยอักษร 2 ตัว
.
ถ้าต้องการหาเครื่องหมาย * หรือ ? จริงๆ ให้ใช้ tilde (~) นำหน้า เช่น ~* หรือ ~?

MATCH กับ INDEX ทำงานร่วมกันอย่างไร?

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-sensitive หรือไม่?

ไม่ครับ 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 (ซึ่งหมายถึงตรงทุกตัวอักษรรวมตัวพิมพ์)

Resources & Related

Related posts

Additional Notes

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 ที่เร็วกว่า

Leave a Reply

Your email address will not be published. Required fields are marked *