INDEX + MATCH — ยืดหยุ่นกว่า VLOOKUP ดูได้ทุกทิศทาง
1. เมื่อ VLOOKUP ยังไม่พอ — คู่หู INDEX + MATCH มาช่วย
ในบทความก่อนหน้าเรารู้จัก XLOOKUP ที่มาแรงและใช้แทน VLOOKUP ได้สบายๆ แต่วันนี้ผมอยากพาคุณไปรู้จักอีกหนึ่งตำนานของวงการ Excel ที่อยู่คู่คนทำงานมานานนับสิบปี — INDEX + MATCH
จริงๆ แล้วคู่นี้คือ “สูตรปราบเซียน” ที่คนเขียนสูตรขั้นสูงใช้กันเป็นประจำ เพราะมันยืดหยุ่นสุดๆ แค่สองฟังก์ชันมารวมกันก็ทำได้ทุกอย่างที่ VLOOKUP ทำ แต่เพิ่มความสามารถที่ VLOOKUP ทำไม่ได้เยอะมาก เช่น:
- ดึงข้อมูลที่อยู่ฝั่งซ้ายของค่าค้นหาได้
- ค้นหาแบบสองมิติ (ทั้งแนวตั้งและแนวนอนพร้อมกัน)
- ไม่พังเมื่อแทรก/ลบคอลัมน์ (ไม่มีเลข index เปราะๆ)
- ทำงานร่วมกับคอลัมน์ไดนามิกอื่นได้ลื่นไหล
เปิดไฟล์ตัวอย่าง แล้วทำตามไปด้วยกันนะครับ — ผมเตรียมข้อมูลพนักงานกับตารางยอดขายรายเดือนไว้ให้ลองเล่นแล้ว
💡 เคล็ดลับ: หลายคนเข้าใจว่า INDEX + MATCH เป็น “ทางเลือกของ VLOOKUP” แต่จริงๆ มันทรงพลังกว่ามาก — พอทำเป็นแล้วคุณจะมองสูตรค้นหาต่างๆ เป็นชิ้นส่วนประกอบกันแทนที่จะเป็นฟังก์ชันตายตัว
2. รู้จัก INDEX — เอา “ค่า” มาจากตำแหน่งที่กำหนด
INDEX คือฟังก์ชันที่ให้เราระบุ “พิกัด” แล้วมันจะเดินไปหยิบค่าที่ตำแหน่งนั้นออกมาให้ โครงสร้างแบบที่ใช้บ่อยที่สุดคือ:
=INDEX( ช่วงข้อมูล , หมายเลขแถว , [หมายเลขคอลัมน์] )
ยกตัวอย่างง่ายๆ จากชีท “สรุปพนักงาน” ในไฟล์ตัวอย่าง — ถ้าผมอยากเอาชื่อของพนักงานคนแรกสุด (แถวที่ 1) ในช่วง พนักงาน!$B$2:$B$6 มาแสดง ก็เขียนได้ว่า:
=INDEX(พนักงาน!$B$2:$B$6,1)
ผลลัพธ์ก็คือ “สมชาย ใจดี” เพราะช่วงนี้เริ่มนับจากแถว 2 ของชีท ซึ่ง INDEX มองว่าเป็นแถวที่ 1 ของช่วงตามที่เรากำหนด
ฟังดูง่ายใช่ไหมครับ? แต่ INDEX อยู่คนเดียวจะเดาไม่ได้ว่าจะหยิบแถวไหน — มันแค่รอคำสั่งว่า “ เดินไปกี่แถว” เท่านั้น ดังนั้นเราต้องมีคนบอกพิกัดอีกที
3. MATCH — ผู้บอกตำแหน่งที่แม่นยำ
MATCH คือฟังก์ชันที่ทำหน้าที่ “หาแถว/คอลัมน์” ว่าค่าที่ต้องการอยู่ตำแหน่งที่เท่าไหร่ภายในช่วง แล้วคืนค่ามาเป็นตัวเลข เช่น ถ้าอยากรู้ว่ารหัส E003 อยู่ในแถวที่เท่าไหร่ของช่วง พนักงาน!$A$2:$A$6:
=MATCH("E003",พนักงาน!$A$2:$A$6,0)
ผลลัพธ์ที่ได้คือ 3 เพราะ E003 เป็นแถวที่ 3 ของช่วงนั้น (นับจาก A2 = แถว 1, A3 = แถว 2, A4 = แถว 3)
อาร์กิวเมนต์ตัวสุดท้ายคือ match_type ซึ่งสำคัญมาก:
| match_type | ความหมาย |
|---|---|
| 0 | หาค่าที่ตรงกันเป๊ะ (ใช้กับรหัส/ชื่อเป็นหลัก) |
| 1 (default) | ค่าที่น้อยกว่าหรือเท่ากับ และต้องเรียงจากน้อยไปมาก |
| -1 | ค่าที่มากกว่าหรือเท่ากับ และต้องเรียงจากมากไปน้อย |
ในไฟล์ตัวอย่างชีท “สรุปพนักงาน” ครับ ตรงไฟล์ผมใส่สูตร =MATCH("E003",พนักงาน!$A$2:$A$6,0) ไว้ที่ B6 ให้เห็นผลลัพธ์เป็น 3 ชัดเจน — ลองพิมพ์รหัสอื่นดูแล้วค่าจะเปลี่ยนตาม มันคือ “เครื่องยนต์หาพิกัด” นั่นเอง
⚠️ ข้อควรระวัง: ในการค้นหาด้วยรหัสหรือชื่อ ควรใช้ match_type เป็น 0 (ตรงเป๊ะ) เสมอครับ — ถ้าเผลอเว้นไว้ Excel จะใช้แบบประมาณค่า (1) ซึ่งให้ผลผิดเงียบๆ เหมือนกับ VLOOKUP ที่ลืมใส่ FALSE
4. รวมพลัง — INDEX + MATCH แทน VLOOKUP
ถึงตรงนี้คุณคงเดาได้แล้วว่าสูตรมหัศจรรย์คือการเอา MATCH ไป“บอกพิกัดแถว”ให้ INDEX:
=INDEX( ช่วงที่ดึงค่า , MATCH( ค่าที่ค้น , ช่วงที่ค้น , 0 ) )
มาดูในชีท “สรุปพนักงาน” ครับ ผมให้พิมพ์รหัสพนักงานลงใน A3 แล้วสูตรจะดึงชื่อ/แผนก/เงินเดือนออกมาโดยเทียบจากตารางพนักงาน:
| คอลัมน์ | สูตร |
|---|---|
| B3 ชื่อ | =INDEX(พนักงาน!$B$2:$B$6,MATCH($A3,พนักงาน!$A$2:$A$6,0)) |
| C3 แผนก | =INDEX(พนักงาน!$C$2:$C$6,MATCH($A3,พนักงาน!$A$2:$A$6,0)) |
| D3 เงินเดือน | =INDEX(พนักงาน!$D$2:$D$6,MATCH($A3,พนักงาน!$A$2:$A$6,0)) |
| E3 โบนัส | =INDEX(พนักงาน!$E$2:$E$6,MATCH($A3,พนักงาน!$A$2:$A$6,0)) |
เปิดไฟล์แล้วดู B3 จะเห็น “อนุชา ศรีสุข” เพราะผมพิมพ์รหัส E003 ไว้เปรียบเทียบกัน ลองเปลี่ยนรหัสใน A3 เป็น E001, E005 แล้วดูว่าชื่อกับเงินเดือนเปลี่ยนตามทันที
จุดที่ต่างจาก VLOOKUP คือ INDEX + MATCH ระบุ “ช่วงที่ดึงค่า” แยกออกจาก “ช่วงที่ค้นหา” ได้ชัดเจน ดังนั้นเวลาคุณแทรกคอลัมน์ใหม่ภายในตาราง สูตรจะยังดึงค่าถูกเสมอ ไม่เหมือน VLOOKUP ที่เลข index เลื่อนแล้วเพี้ยนทั้งชุด
💡 เคล็ดลับ: ยึดโครงสร้างนี้ไว้ให้เป็น “แม่แบบ” ได้เลยครับ — แค่เปลี่ยนช่วงค้นหากับช่วงดึงค่าตามสถานการณ์ ก็ใช้ได้กับข้อมูลทุกรูปแบบ ไม่ใช่แค่ตารางพนักงาน
5. Reverse Lookup — ดึงค่าฝั่งซ้ายก็ได้ (VLOOKUP ทำไม่ได้)
ข้อจำกัดใหญ่ที่สุดของ VLOOKUP คือมันหาค่าได้เฉพาะคอลัมน์ที่อยู่ขวาของค่าค้นหาเท่านั้น — ถ้าค่าค้นหาอยู่ขวาแต่ผลที่อยากได้อยู่ซ้าย จะต้องไปย้ายคอลัมน์ก่อนเสมอ
INDEX + MATCH ไม่มีปัญหาแบบนั้นครับ เพราะเราควบคุมทั้ง “ช่วงค้นหา” และ “ช่วงดึงค่า” เอง
ในชีท “สรุปพนักงาน” ตรงหัวข้อ Reverse Lookup ผมให้พิมพ์ชื่อพนักงานใน A10 แล้วหาว่ารหัสของเขาคืออะไร:
=INDEX(พนักงาน!$A$2:$A$6,MATCH($A10,พนักงาน!$B$2:$B$6,0))
ลองดูครับ — A10 ผมพิมพ์ “วิภา แก้วใส” แล้ว B10 จะคืน “E002” เพราะ MATCH ไปหาชื่อในคอลัมน์ B แล้ว INDEX ดึงรหัสจากคอลัมน์ A ฝั่งซ้ายออกมา
นี่คือเหตุผลว่าทำไมคนที่ทำงานกับรายงานที่โครงตารางสลับซับซ้อนถึงยก INDEX + MATCH ให้เป็นสูตรที่ขาดไม่ได้
6. INDEX + MATCH + MATCH — ค้นหาสองมิติในครั้งเดียว
ถึงจุดที่ “ว้าว” ที่สุดของบทความนี้แล้วครับ — INDEX + MATCH ยังขยายไปได้ถึงการค้นหาแบบ สองมิติ คือทั้งแนวตั้งและแนวนอนพร้อมกัน ด้วยการใส่ MATCH สองตัว (ตัวหนึ่งหาแถว อีกตัวหาคอลัมน์):
=INDEX( ตารางข้อมูล , MATCH( สินค้า, คอลัมน์สินค้า, 0 ) , MATCH( เดือน, แถวเดือน, 0 ) )
เปิดชีท “ยอดขายรายเดือน” ในไฟล์ตัวอย่างดูครับ — มีตารางสินค้า 4 ตัวกับเดือน ม.ค.-มี.ค. ที่เซลล์ H4 ใช้สูตร:
=INDEX($A$4:$D$7,MATCH($F4,$A$4:$A$7,0),MATCH($G4,$B$3:$D$3,0))
ผมตั้งค่าตัวอย่างไว้ที่สินค้า “เสื้อเชิ้ตแขนยาว” + เดือน “มี.ค.” แล้วผลลัพธ์คือ 6,900 — ตรงกับจุดตัดในตารางพอดี ลองเปลี่ยนสินค้าหรือเดือนใน F4/G4 แล้วยอดจะอัปเดตเองแบบ Live
วิธีนี้เหมาะมากกับงานพวกตารางราคา, ตารางยอดขาย, อัตราแลกเปลี่ยน หรือกำหนดการใดๆ ที่ต้องเจอค่า “ที่ตัดกัน” ของสองหมวดหมู่ และช่วยให้คุณไม่ต้องเขียนสูตรนับสิบตัวไล่ตามแต่ละกรณี
📌 ข้อควรจำ: ลำดับ MATCH สองตัวต้องให้ตรงกับมิติของ INDEX ครับ — ตัวแรกคู่กับตำแหน่ง “แถว” (แนวตั้ง) ตัวที่สองคู่กับ “คอลัมน์” (แนวนอน) สลับกันไม่ได้เด็ดขาด
7. ตัวอย่างประยุกต์จากงานจริง
สถานการณ์ที่ 1: HR เรียกดูข้อมูลพนักงานแบบเร็วๆ
ฝ่ายบุคคลมักมีตารางพนักงานขนาดใหญ่หลายร้อยแถว ใช้ INDEX + MATCH สร้างแผงค้นหาที่พิมพ์รหัสแล้วเห็นทุกอย่างพร้อมกัน (ชื่อ, แผนก, เงินเดือน, โบนัส) แบบในชีท “สรุปพนักงาน” — ประหยัดเวลาลากหาไปมาแถวแล้วแถวเล่า และแถวที่เป็น Zero ของข้อมูล (เช่น เงินเดือน 0) ก็จะแสดง 0 ตรงๆ ไม่ใช่ #N/A เหมือน VLOOKUP
สถานการณ์ที่ 2: ร้านค้าดูยอดขายสินค้าตามเดือน
ผู้จัดการร้านมีตารางยอดขายรายสินค้าคูณรายเดือน (แบบสองมิติ) อยากรู้ว่าเดือนนี้สินค้าไหนขายดี—ใช้ INDEX+MATCH+MATCH ทำแผงเลือก “สินค้า” กับ “เดือน” แล้วเห็นยอดทันที โดยไม่ต้องไปขุดในก้อนข้อมูลใหญ่ เหมือนชีท “ยอดขายรายเดือน” ที่ผมอธิบายไป
สถานการณ์ที่ 3: ฝ่ายขายหาค่าคอมมิชชันตามยอด
สมมติมีตารางอัตราคอมมิชชันแบบขั้นบันได(ยอดถึงระดับไหนได้ %) การใช้ INDEX + MATCH แบบ match_type = 1 (ค่าโดยประมาณ) จะช่วยจับว่าโครงการไหนตกอยู่ในช่วงไหนได้อัตโนมัติ — แต่ต้องแน่ใจว่าตารางเรียงจากน้อยไปมากเสมอ
8. ข้อควรระวังและปัญหาที่เจอบ่อย
แม้ INDEX + MATCH จะยืดหยุ่น แต่ก็มีจุดที่ควรรู้ไว้ก่อนใช้:
| อาการ | สาเหตุ | วิธีแก้ |
|---|---|---|
| คืน #N/A | MATCH หาค่าไม่เจอ (เช่น พิมพ์ชื่อผิด) | เช็คค่าที่ค้นให้ตรงกัน, ใช้ TRIM ลบช่องว่าง |
| คืน #REF! | หมายเลขแถว/คอลัมน์ของ INDEX เกินช่วง | ลดขนาดช่วงให้ตรงกับข้อมูลจริง |
| ได้ค่าผิดแบบเงียบ | ลืมใส่ match_type = 0 | ระบุ 0 เสมอเมื่อต้องการค่าตรงเป๊ะ |
| ช่วงค้น/ดึงยาวไม่เท่ากัน | INDEX คืน #VALUE! | ปรับให้ทั้งสองช่วงมีจำนวนแถวเท่ากัน |
| ข้อมูลมีช่องว่างซ่อน | MATCH หาไม่เจอ | ใช้ TRIM หรือลบช่องว่างก่อน |
⚠️ ข้อควรระวัง: ถ้าได้ค่าผิดโดยไม่มี error เตือน ให้เช็ค match_type ของ MATCH ก่อนครับ — เพราะค่าแบบ “ประมาณ” จะให้ผลที่ดู “พอใช้ได้” แต่จริงๆ ผิด ซึ่งเป็นความผิดพลาดเงียบๆ ที่ตรวจยากที่สุด
9. เปรียบเทียบ INDEX + MATCH กับ VLOOKUP / XLOOKUP
เพื่อให้เห็นภาพชัดขึ้น ลองเทียบทั้งสามตัวเลือกดูครับ:
| ความสามารถ | VLOOKUP | INDEX + MATCH | XLOOKUP |
|---|---|---|---|
| ดึงค่าฝั่งซ้ายได้ | ไม่ได้ | ได้ | ได้ |
| ค้นหาสองมิติ (แถว+คอลัมน์) | ไม่ได้ | ได้ (MATCH+MATCH) | ใช้ XLOOKUP ซ้อน |
| ทนต่อการแทรกคอลัมน์ | ไม่ (เลข index เลื่อน) | ได้ (อ้างอิงช่วงตรงๆ) | ได้ |
| ใช้งานบน Excel รุ่นเก่า | ได้ | ได้ | เฉพาะ MS365/2021+ |
| อ่านง่าย | ง่ายที่สุด | พอใช้ | ง่าย |
จากตารางจะเห็นว่าหากคุณใช้ Excel รุ่นเก่าหรือต้องเปิดไฟล์กับเครื่องที่ไม่มี XLOOKUP INDEX + MATCH คือตัวเลือกที่ยืดหยุ่นที่สุด — เพราะใช้ได้กับทุกเวอร์ชันและยังรองรับการค้นหาสองมิติที่ XLOOKUP ทำได้ไม่ตรงตัวนัก
💡 เคล็ดลับ: เลือกตามบริบทครับ — ไฟล์ที่ใช้กับคนอื่นทั่วบริษัทอาจใช้ VLOOKUP/INDEX+MATCH เพื่อความเข้ากันได้ แต่ถ้าเป็นไฟล์ส่วนตัวบน Microsoft 365 จะใช้ XLOOKUP ก็น่าจะสะดวกกว่า ทั้งหมดล้วน “ถูก” ต่างกันที่ความยืดหยุ่นกับชุดฟีเจอร์ที่คุณต้องการ
10. สรุป
INDEX + MATCH คือคู่หูที่แยกกันทำหน้าที่คนละอย่างจนมารวมกันได้อย่างลงตัว:
| ฟังก์ชัน | บทบาท |
|---|---|
| INDEX | หยิบค่าจากตำแหน่งที่กำหนด (ผู้เสิร์ฟค่า) |
| MATCH | หาตำแหน่งแถว/คอลัมน์ของค่าที่ต้องการ (นักหาพิกัด) |
| INDEX+MATCH | แทน VLOOKUP ได้ + ดึงฝั่งซ้ายได้ + ทนต่อการแทรกคอลัมน์ |
| INDEX+MATCH+MATCH | ค้นหาสองมิติทั้งแนวตั้งและแนวนอนในครั้งเดียว |
เปิดไฟล์ตัวอย่างแล้วลองเล่นดูทั้งสามชีทครับ — เริ่มจากชีท “สรุปพนักงาน” เพื่อดู INDEX+MATCH พื้นฐานและ Reverse Lookup จากนั้นไปลุยชีท “ยอดขายรายเดือน” เพื่อลองค้นหาสองมิติ เปลี่ยนค่าสินค้า/เดือนแล้วดูผลลัพธ์เปลี่ยนตามแบบเรียลไทม์
บทความหน้าผมจะพาคุณไปรู้จัก IF / IFS / SWITCH — เครื่องมือจัดการเงื่อนไขหลายชั้นที่จะช่วยให้สูตรของคุณฉลาดขึ้นอีกขั้น เจอกันครับ! 😊