Thep Excel

XLOOKUP คืออะไร ใช้งานยังไง ครบทุก Argument ในที่เดียว 1

XLOOKUP คืออะไร ใช้งานยังไง ครบทุก Argument ในที่เดียว

อ่าน 13 นาที

สารบัญ

XLOOKUP คืออะไร

XLOOKUP คือฟังก์ชันค้นหาข้อมูลของ Excel ที่รับค่าที่คุณอยากหา แล้วไปดึงข้อมูลอีกช่วงหนึ่งกลับมาให้ โดยที่ช่วงที่จะดึงจะอยู่ตรงไหนของตารางก็ได้ ไม่ต้องอยู่ติดกันหรือเรียงลำดับตายตัวเหมือนฟังก์ชันรุ่นเก่า พูดง่ายๆ คือมันคือฟังก์ชัน “หา A แล้วเอา B มาให้” ที่ยืดหยุ่นที่สุดตัวหนึ่งใน Excel ตอนนี้

ผมสอน VLOOKUP มาสิบกว่าปี พอ Microsoft ปล่อย XLOOKUP ออกมา ผมเปลี่ยนมาสอนตัวนี้เป็นหลักทันที เพราะมันแก้ปัญหาที่ VLOOKUP, HLOOKUP และ INDEX+MATCH สะสมมานานหลายปีได้เกือบหมดในฟังก์ชันเดียว ทั้งเรื่องค้นหาได้แค่ทิศทางเดียว การนับตำแหน่งคอลัมน์ที่พังทันทีที่มีคนแทรกคอลัมน์ใหม่ หรือการต้องห่อ IFERROR ทุกครั้งเพื่อกันค่า #N/A โผล่ให้เห็น

ตอนสอนคอร์สในองค์กร ผมมักเจอคนสองกลุ่ม กลุ่มแรกใช้ VLOOKUP มานาน แล้วมาถามว่า XLOOKUP ต่างกันตรงไหน คุ้มไหมที่จะเปลี่ยน กลุ่มที่สองไม่เคยรู้จัก Lookup ตัวไหนมาก่อนเลย อยากเริ่มเรียนตัวที่ทันสมัยที่สุดไปเลย ทั้งสองกลุ่มผมแนะนำแบบเดียวกันคือถ้า Excel รองรับ ให้เริ่มที่ XLOOKUP เลย เพราะเวลาที่เสียไปกับการทำความเข้าใจ syntax มันคุ้มกว่ามากในระยะยาว

ถ้าคุณยังไม่คุ้นกับพื้นฐานการค้นหาข้อมูลในตารางเลย แนะนำให้อ่าน VLOOKUP คืออะไร ใช้งานยังไง ก่อน เพราะบทความนี้จะพาลงลึกเฉพาะ XLOOKUP ตั้งแต่ syntax ครบทั้ง 6 argument ไปจนถึงตัวอย่างที่ VLOOKUP ทำไม่ได้เลย อย่างการหาข้อมูลจากขวาไปซ้าย การดึงหลายคอลัมน์พร้อมกัน และการค้นหาค่าล่าสุดแบบย้อนหลัง

XLOOKUP syntax และ 6 argument ที่ต้องรู้

=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])

argument 3 ตัวแรกจำเป็นต้องใส่ ส่วนอีก 3 ตัวหลังเป็นตัวเลือกเสริม แต่ผมอยากให้คุณรู้จักทั้งหมด เพราะ 3 ตัวหลังนี่แหละคือของที่ทำให้ XLOOKUP เหนือกว่า VLOOKUP จริงๆ ใครอยากอ่านนิยามฉบับทางการ ดูได้ที่ เอกสาร XLOOKUP ของ Microsoft ครับ

1-3. lookup_value, lookup_array, return_array คือ 3 ตัวที่ต้องใส่เสมอ

lookup_value คือค่าที่คุณอยากค้นหา เหมือน VLOOKUP ทุกอย่าง ใส่ตัวเลข ข้อความ หรืออ้างอิงเซลล์ก็ได้

lookup_array คือช่วงที่จะเอาไปค้นหา ตรงนี้ต่างจาก VLOOKUP ตรงที่ไม่จำเป็นต้องเป็นคอลัมน์ซ้ายสุดของตารางอะไรเลย จะเป็นคอลัมน์ไหน แถวไหน อยู่ตรงไหนของชีทก็ได้

return_array คือช่วงที่จะดึงค่ามาแสดงผล หัวใจสำคัญคือ lookup_array กับ return_array เป็นคนละช่วงที่แยกอิสระจากกันโดยสิ้นเชิง ไม่ต้องอยู่ในตารางเดียวกันด้วยซ้ำ (แม้ในทางปฏิบัติส่วนใหญ่จะอยู่ตารางเดียวกันก็ตาม) ขอแค่จำนวนแถวหรือจำนวนคอลัมน์เท่ากันก็พอ

4. if_not_found คือตัวจัดการเวลาหาไม่เจอ

ถ้าไม่ใส่ argument นี้ แล้วหาไม่เจอ Excel จะคืน #N/A มาให้เหมือนเดิม แต่ถ้าใส่ ก็สั่งได้เลยว่าอยากให้แสดงข้อความอะไรแทน เช่นใส่ "ไม่พบข้อมูล" แทนที่จะปล่อยให้ #N/A โผล่อยู่กลางรายงาน ข้อนี้ผมชอบมากเวลาทำ Dashboard ให้ลูกค้าดู เพราะไม่ต้องมานั่งครอบ IFERROR ซ้อนอีกชั้นเหมือนสมัยใช้ VLOOKUP

5. match_mode คือวิธีจับคู่ ไม่ใส่ = เอาแบบตรงเป๊ะ

ค่าความหมาย
0 (default)หาค่าที่ตรงเป๊ะเท่านั้น ไม่เจอ = #N/A
-1หาค่าตรงเป๊ะก่อน ถ้าไม่เจอ ให้เอาค่าที่เล็กกว่าถัดไป
1หาค่าตรงเป๊ะก่อน ถ้าไม่เจอ ให้เอาค่าที่ใหญ่กว่าถัดไป
2wildcard match ใช้ *, ?, ~ ได้

จุดที่ต้องจำให้ขึ้นใจคือ ถ้าไม่ใส่ argument นี้เลย ค่า default ของ XLOOKUP คือ 0 (exact match) ซึ่งต่างจาก VLOOKUP ที่ default เป็น approximate match ตรงนี้ปลอดภัยกว่าตั้งแต่ต้น เพราะงานส่วนใหญ่ต้องการค่าตรงเป๊ะอยู่แล้ว แต่ก็เป็นจุดที่คนย้ายจาก VLOOKUP มาแล้วงงบ่อยเหมือนกัน เดี๋ยวอธิบายต่อในหัวข้อจุดพลาด

6. search_mode คือทิศทางการไล่หาในตาราง

ค่าความหมาย
1 (default)ไล่หาจากแถวบนสุดลงมาล่างสุด
-1ไล่หาจากแถวล่างสุดขึ้นไปบนสุด
2binary search แบบเร็ว ต้องเรียงข้อมูลจากน้อยไปมากก่อน
-2binary search แบบเร็ว ต้องเรียงข้อมูลจากมากไปน้อยก่อน

ค่า 2 กับ -2 เร็วกว่าแบบไล่ทีละแถวจริง แต่ถ้าข้อมูลไม่ได้เรียงตามที่กำหนดไว้ ผลลัพธ์จะผิดแบบเงียบๆ ไม่มี error เตือน ผมเลยแนะนำให้ใช้แค่ 1 กับ -1 พอ ยกเว้นไฟล์ใหญ่มากๆ ระดับแสนแถวที่ความเร็วมีผลจริง

รวมแล้ว 3 argument หลังนี่แหละที่ผมว่าเป็นเหตุผลจริงๆ ที่ XLOOKUP ควรมาแทน VLOOKUP ไม่ใช่แค่เรื่องหาซ้ายหาขวาอย่างที่หลายคนเข้าใจ เพราะ if_not_found ทำให้ไม่ต้องพึ่ง IFERROR อีกชั้น match_mode ทำให้เลือกพฤติกรรมการจับคู่ได้ละเอียดกว่าแค่ TRUE/FALSE และ search_mode เปิดโอกาสให้ทำ pattern อย่างค้นหาค่าล่าสุดที่ VLOOKUP ทำตรงๆ ไม่ได้เลย

ตัวอย่างการใช้งาน XLOOKUP

ตัวอย่างที่ 1: ค้นหาแบบตรงเป๊ะพื้นฐาน

สมมติมีตารางสินค้าแบบนี้ (วางที่ A1:C5)

รหัสสินค้าชื่อสินค้าราคา
P001เมาส์ไร้สาย350
P002คีย์บอร์ด590
P003จอมอนิเตอร์4500
P004หูฟัง890

อยากรู้ราคาของ P003 ใช้สูตร

=XLOOKUP("P003", A2:A5, C2:C5)

ผลลัพธ์คือ 4500 สังเกตว่าเราไม่ต้องนับตำแหน่งคอลัมน์เหมือน VLOOKUP เลย แค่บอกตรงๆ ว่า “หาใน A2:A5 แล้วดึงค่าจาก C2:C5” อ่านสูตรทีหลังก็เข้าใจทันทีว่ามันทำอะไร ไม่ต้องนั่งนับว่าเลข 3 ในสูตร VLOOKUP หมายถึงคอลัมน์ไหน

ตัวอย่างที่ 2: ใส่ข้อความเองเวลาหาไม่เจอ

ใช้ตารางเดิม ลองหารหัสที่ไม่มีในตาราง

=XLOOKUP("P099", A2:A5, C2:C5, "ไม่พบสินค้านี้ในระบบ")

พอไม่เจอ P099 สูตรจะคืนข้อความ “ไม่พบสินค้านี้ในระบบ” แทนที่จะเป็น #N/A โผล่กลางรายงานให้ลูกค้าเห็น เขียนสูตรเดียวจบ ไม่ต้องครอบ IFERROR ซ้อนอีกชั้น

ตัวอย่างที่ 3: หาข้อมูลจากขวาไปซ้าย จุดที่ VLOOKUP ทำไม่ได้เลย

สมมติตารางเรียงคอลัมน์แบบนี้ (วางที่ A1:D5) โดยที่รหัสสินค้าอยู่คอลัมน์ B ซึ่งอยู่ทางซ้ายของชื่อสินค้าที่อยู่คอลัมน์ C

ลำดับรหัสสินค้าชื่อสินค้าราคา
1P001เมาส์ไร้สาย350
2P002คีย์บอร์ด590
3P003จอมอนิเตอร์4500
4P004หูฟัง890

ทีนี้สมมติคุณรู้แค่ชื่อสินค้า อยากได้รหัสสินค้ากลับมา นั่นคือต้องค้นหาในคอลัมน์ C แล้วดึงค่าจากคอลัมน์ B ที่อยู่ทางซ้ายของมัน งานแบบนี้ VLOOKUP ทำไม่ได้เลย เพราะมันบังคับให้คอลัมน์ที่ค้นหาต้องเป็นคอลัมน์ซ้ายสุดของช่วงเสมอ ดึงค่าได้เฉพาะคอลัมน์ที่อยู่ทางขวาเท่านั้น

XLOOKUP ไม่มีข้อจำกัดนี้ เพราะ lookup_array กับ return_array เป็นคนละช่วงที่ระบุแยกกันตรงๆ

=XLOOKUP("เมาส์ไร้สาย", C2:C5, B2:B5)

หาในคอลัมน์ C (ชื่อสินค้า) แล้วดึงค่าจากคอลัมน์ B (รหัสสินค้า) ที่อยู่ทางซ้าย ได้ผลลัพธ์ P001 กลับมาโดยไม่ต้องสลับตำแหน่งคอลัมน์ในตารางต้นทางเลยสักนิด นี่คือจุดที่ผมว่าประหยัดเวลาที่สุดตอนย้ายมาจาก VLOOKUP

ตัวอย่างที่ 4: ดึงหลายคอลัมน์พร้อมกันในสูตรเดียว

ใช้ตารางพนักงานแบบนี้ (วางที่ A1:D5)

รหัสพนักงานชื่อแผนกเงินเดือน
EMP001สมชายขาย28000
EMP002สมหญิงบัญชี32000
EMP003วิชัยIT45000
EMP004มาลีHR30000

ปกติถ้าใช้ VLOOKUP อยากได้ทั้งชื่อ แผนก และเงินเดือน ต้องเขียนสูตร 3 ครั้ง ครั้งละคอลัมน์ แต่ XLOOKUP ทำได้ในสูตรเดียว ถ้า return_array เป็นช่วงหลายคอลัมน์

=XLOOKUP("EMP002", A2:A5, B2:D5)

พิมพ์สูตรนี้ในเซลล์เดียว ผลลัพธ์จะ spill ออกมา 3 คอลัมน์พร้อมกัน คือ สมหญิง, บัญชี, 32000 ไม่ต้องลากสูตรทีละคอลัมน์เหมือนเดิม เวลาทำรายงานสรุปที่ต้องดึงข้อมูลหลายฟิลด์จากรหัสเดียวกัน ตัวนี้ประหยัดเวลาไปเยอะมากกกก

ตัวอย่างที่ 5: ค้นหาค่าล่าสุดด้วย search_mode -1

นี่คือเคสที่ผมชอบอธิบายให้ดูเพราะมันแก้ปัญหาที่ VLOOKUP ทำตรงๆ ไม่ได้เลย สมมติมี log ราคาสินค้าที่บันทึกทุกครั้งที่มีการปรับราคา เรียงตามวันที่จากเก่าไปใหม่ (วางที่ A1:C6)

วันที่รหัสสินค้าราคา
1/1/2026P0034200
15/2/2026P001330
3/3/2026P0034350
20/5/2026P002570
10/7/2026P0034500

สังเกตว่า P003 มีการปรับราคาถึง 3 ครั้ง ถ้าใช้ XLOOKUP แบบปกติ (search_mode = 1) มันจะหาจากบนลงล่างแล้วเจอแถวแรกสุดคือ 4200 ซึ่งเป็นราคาเก่าที่สุด ไม่ใช่ราคาปัจจุบัน

=XLOOKUP("P003", B2:B6, C2:C6, "ไม่พบ", 0, -1)

ใส่ search_mode เป็น -1 สั่งให้ XLOOKUP ไล่หาจากแถวล่างสุดขึ้นไปแทน พอเจอ P003 แถวแรกที่เจอจากด้านล่างคือแถววันที่ 10/7/2026 ซึ่งเป็นแถวล่าสุด ผลลัพธ์เลยได้ 4500 ซึ่งคือราคาปัจจุบัน โดยไม่ต้องเรียงข้อมูลใหม่หรือใช้สูตร array ซับซ้อนอะไรเลย ขอแค่ log เรียงตามเวลาแบบธรรมชาติของมันอยู่แล้วก็พอ

XLOOKUP vs VLOOKUP vs INDEX+MATCH เลือกใช้ตัวไหนดี

หัวข้อXLOOKUPVLOOKUPINDEX+MATCH
ทิศทางค้นหาซ้ายไปขวาหรือขวาไปซ้ายก็ได้ซ้ายไปขวาเท่านั้นซ้ายไปขวาหรือขวาไปซ้ายก็ได้
อ้างอิงคอลัมน์ผลลัพธ์ระบุ return_array ตรงๆนับ col_index_numระบุช่วงตรงๆ ผ่าน INDEX
ดึงหลายคอลัมน์พร้อมกันได้ผ่าน spillต้องเขียนแยกทีละคอลัมน์เขียนแยกทีละคอลัมน์เช่นกัน
จัดการค่าหาไม่เจอมี if_not_found ในตัวต้องครอบ IFERROR เองต้องครอบ IFERROR เอง
ความยาวสูตรสั้น อ่านง่ายสั้นยาวกว่าเพราะซ้อน 2 ฟังก์ชัน
ใช้ได้กับ Excel เวอร์ชันไหน365, 2024, 2021 ขึ้นไปทุกเวอร์ชันทุกเวอร์ชัน

ผมเช็คเรื่องเวอร์ชันที่รองรับ XLOOKUP จากเอกสารทางการของ Microsoftมาแล้ว ใช้งานได้ใน Excel for Microsoft 365 ทุกแพลตฟอร์ม รวมถึง Excel 2024 และ Excel 2021 (ทั้งเวอร์ชัน Windows และ Mac) แต่ใช้ไม่ได้ใน Excel 2016 และ Excel 2019

ถ้าถามผมตรงๆ ไฟล์ใหม่ที่ทำเองและมั่นใจว่าคนเปิดใช้ Excel รุ่นที่รองรับ ผมแนะนำ XLOOKUP เป็นค่าเริ่มต้นเลย เพราะสูตรอ่านง่ายกว่าและปลอดภัยกว่า แต่ถ้าทำไฟล์ที่จะส่งให้ลูกค้าหรือหน่วยงานที่ไม่รู้ว่าใช้ Excel เวอร์ชันไหน หรือทีมยังใช้ Excel 2019 อยู่ INDEX+MATCH ยังเป็นทางเลือกที่ทำได้ครบเกือบเท่า XLOOKUP และเปิดได้ทุกเวอร์ชัน ส่วน VLOOKUP ผมมองว่าเหมาะกับงานง่ายๆ ที่ค้นหาจากซ้ายไปขวาอย่างเดียวจริงๆ และทีมคุ้นเคยกับมันอยู่แล้ว

งานให้คำปรึกษาหลายที่ที่ผมเจอ ไฟล์เดียวกันมักมีทั้งสามฟังก์ชันปนกันอยู่จริงๆ เพราะไฟล์ถูกสร้างต่อกันมาหลายปีจากหลายคน ไม่ต้องพยายามไล่แปลงทุกสูตรเป็น XLOOKUP ให้หมดในคราวเดียว แค่รู้ว่าสูตรใหม่ที่คุณเขียนเองควรเป็นตัวไหนก็พอ ส่วนสูตรเก่าที่ยังทำงานถูกต้องอยู่ ปล่อยมันไว้แบบนั้นได้ครับ ไม่ต้องรื้อทิ้งโดยไม่จำเป็น

จุดพลาดและข้อควรระวังตอนใช้ XLOOKUP

ใช้ในเวอร์ชันเก่าไม่ได้ ขึ้น #NAME? ถ้าไฟล์ที่มีสูตร XLOOKUP ถูกเปิดใน Excel 2016 หรือ 2019 สูตรจะขึ้น #NAME? ทันที เพราะเวอร์ชันนั้นไม่รู้จักฟังก์ชันนี้เลย ก่อนส่งไฟล์ให้ใคร ควรเช็คก่อนว่าปลายทางใช้ Excel เวอร์ชันไหน

lookup_array กับ return_array ขนาดไม่เท่ากัน ขึ้น #VALUE! ถ้า lookup_array เป็นช่วง 10 แถว แต่ return_array ดันเป็น 8 แถว Excel จะคืน #VALUE! ทันที เพราะมันจับคู่ตำแหน่งแถวไม่ได้ จุดนี้มักเกิดตอนก็อปปี้สูตรแล้วลากช่วงไม่ครบ หรือแก้ไขตารางแล้วลืมขยายช่วงให้เท่ากัน

นิสัยเดิมจาก VLOOKUP TRUE อาจทำให้พลาด คนที่เคยชินกับ VLOOKUP แล้วไม่ใส่ range_lookup เลย (ปล่อยให้เป็น TRUE โดยอัตโนมัติ) พอย้ายมาใช้ XLOOKUP แล้วไม่ใส่ match_mode เหมือนกัน จะเจอพฤติกรรมกลับด้าน เพราะ default ของ XLOOKUP คือ 0 (exact match) ไม่ใช่ approximate ถ้าอยากได้พฤติกรรมแบบตารางเกรดหรือตารางคอมมิชชั่นที่เคยทำกับ VLOOKUP TRUE ต้องใส่ match_mode เป็น -1 เอง ไม่งั้นจะได้ #N/A แทนที่จะได้ค่าประมาณเหมือนที่คุ้นเคย

ลืมใส่ argument กลางแล้ว argument ท้ายเลื่อนตำแหน่งผิด ถ้าอยากข้าม if_not_found แต่ยังอยากใส่ match_mode หรือ search_mode ต้องเว้นตำแหน่งของ if_not_found ไว้ด้วยเครื่องหมายจุลภาคเปล่าๆ เช่น =XLOOKUP("P003", A2:A5, C2:C5, , 0, -1) ถ้าลืมเว้นตำแหน่งนี้ Excel จะเข้าใจว่าค่าที่คุณตั้งใจใส่เป็น match_mode กลายเป็น if_not_found แทน แล้วสูตรจะให้ผลลัพธ์ผิดแบบที่ไม่มี error เตือนเลย

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

XLOOKUP ใช้แทน VLOOKUP ได้เลยไหม

ได้เกือบทุกกรณีครับ ถ้า Excel ของคุณรองรับ XLOOKUP ทำได้ทุกอย่างที่ VLOOKUP ทำได้ และทำได้มากกว่าด้วย ยกเว้นกรณีเดียวคือไฟล์ต้องใช้ร่วมกับคนที่ยังเปิด Excel 2016 หรือ 2019 อยู่ ตรงนั้นต้องคง VLOOKUP หรือ INDEX+MATCH ไว้แทน

XLOOKUP ใช้ Excel เวอร์ชันไหนได้บ้าง

ใช้ได้ใน Excel for Microsoft 365 ทุกแพลตฟอร์ม Excel 2024 และ Excel 2021 ใช้ไม่ได้ใน Excel 2016 และ 2019 ถ้าไม่แน่ใจว่าเวอร์ชันตัวเองรองรับไหม ลองพิมพ์ =XLOOKUP( ในเซลล์ดู ถ้า Excel auto-complete ชื่อฟังก์ชันให้ ก็แปลว่าใช้ได้

XLOOKUP หาค่าจากขวาไปซ้ายได้ไหม

ได้ครับ นี่คือจุดเด่นที่สุดของมันเลย เพราะ lookup_array กับ return_array เป็นช่วงที่ระบุแยกจากกันอิสระ อยู่ตรงไหนของตารางก็ได้ ไม่ได้ผูกกับตำแหน่งซ้ายขวาแบบ VLOOKUP ดูตัวอย่างที่ 3 ด้านบนได้เลย

XLOOKUP กับ INDEX MATCH อันไหนดีกว่า

ถ้า Excel รองรับ XLOOKUP ผมว่า XLOOKUP ดีกว่าเพราะสูตรสั้นกว่า อ่านง่ายกว่า และมี if_not_found ในตัว แต่ถ้าต้องทำไฟล์ให้เปิดได้ทุกเวอร์ชัน INDEX+MATCH ยังเป็นตัวเลือกที่ทำได้เกือบทุกอย่างเหมือนกัน แค่สูตรจะยาวกว่าเพราะต้องซ้อน 2 ฟังก์ชัน

ทำไม XLOOKUP ขึ้น #VALUE! แก้ยังไง

ส่วนใหญ่เกิดจาก lookup_array กับ return_array มีจำนวนแถวหรือคอลัมน์ไม่เท่ากัน ลองเช็คว่าช่วงทั้งสองที่เลือกมีจำนวนแถวเท่ากันไหม ถ้าลากสูตรจากไฟล์เก่ามา ให้เช็คว่าตอนแก้ไขตารางมีการขยายหรือลดช่วงข้อมูลแล้วลืมปรับสูตรตามหรือเปล่า

อ่านต่อ

ถ้ายังไม่คุ้นกับพื้นฐานการค้นหาข้อมูลในตาราง อ่าน VLOOKUP คืออะไร ใช้งานยังไง ก่อนได้เลยครับ

ถ้าอยากรู้จัก XLOOKUP แบบลึกกว่านี้ ทั้งเทคนิคขั้นสูงและการใช้งานร่วมกับฟังก์ชันอื่น อ่าน XLOOKUP ฉบับละเอียด ที่ผมเขียนแยกไว้อีกชิ้นนึง หรือดู syntax แบบสรุปสั้นๆ ได้ที่ หน้าอ้างอิงฟังก์ชัน XLOOKUP

สุดท้าย ถ้าอยากเรียน Excel ตั้งแต่พื้นฐานไปจนถึงฟังก์ชันขั้นสูงแบบเป็นระบบ ไม่ต้องมานั่งงมเองทีละฟังก์ชัน ลองดูคอร์สของผมที่ thepexcel.com/courses ได้เลยครับ