เลิกใช้ VLookup หรือแม้แต่ XLookup หันมาใช้สูตรนี้ใน Excel 365 แทนดีกว่า

เวลาใช้สูตร VLookup หรือ XLookup แล้วรู้สึกไม่สบายใจ 2 ชั้น แบบนี้หรือเปล่า 

1. ไม่แน่ใจว่าสูตรจะหาค่าเจอไหม ถ้าไม่เจอแล้วเกิด error เตือนขึ้นมาจะต้องมาสร้างสูตรเพื่อแก้ error กันอีก

2. ถ้าหาค่าเจอแล้วก็ตาม ยังแอบคิดห่วงอยู่ในใจอีกว่า สิ่งที่หาเจอนี้ครบทุกรายการแล้วหรือยัง เพราะถ้ามีรายการที่บันทึกซ้ำกันเอาไว้ สูตรทั้งสองนี้จะกอดคอให้คำตอบเดียวเป็นรายการแรกที่หาเจอมาให้อีกนั่นแหละ หมดสิทธิ์เห็นรายการอื่นที่ซ้ำ

พอเปลี่ยนมาใช้ Excel 365 หรือ 2021 แนะนำให้ใช้สูตร Filter แทนดีกว่าครับ สูตร Filter จะช่วยหาทุกรายการที่มีรหัสตรงกับรหัสสินค้าที่ต้องการมาให้

เหนือชั้นขึ้นอีกนิด ให้ใช้สูตร CountIF ช่วยหาก่อนว่ารหัสนั้นมีกี่รายการ จะได้ไม่ต้องเสียเวลามาแก้ error ตามทีหลัง

* ถ้ามีเพียงรายการเดียว CountIF ในเซลล์ F8 = 1 จึงใช้ VLooup หรือ XLookup ตามสูตรในภาพนี้

=IF( $F$8=1, VLOOKUP( $F$5, MyData, 2, 0 ), 0)
=IF( $F$8=1, XLOOKUP( $F$5, ID, C5:D9 ), 0)

** ถ้ามีรายการเดียวหรือหลายรายการ CountIF ในเซลล์ F8 >= 1 จึงใช้ Filter ตามสูตรในภาพนี้

=IF( $F$8>=1, FILTER( C5:D9, ID=F5 ), 0 )

ถ้าคุณใช้ 365 เป็นหลัก เลิกใช้ VLookup หรือแม้แต่ XLookup หันมาใช้สูตร Filter แทนดีกว่า

Download ตัวอย่างจาก
https://drive.google.com/file/d/1k16UiuVrJKeI4VfDxSh3Kbhuzci9FFFJ/view?usp=sharing

+++++++++++++++++++++++++++++++++

Copilot ตอบ:

ใช่เลย! FILTER สามารถเป็นทางเลือกที่ดีกว่า XLOOKUP ในหลายกรณี โดยเฉพาะเมื่อทำงานกับ Dynamic Array เนื่องจากไม่ต้องกำหนดช่วงข้อมูลแบบคงที่

📌 ข้อดีของ FILTER เทียบกับ XLOOKUP ใน Dynamic Array:

  • ปรับช่วงข้อมูลอัตโนมัติ: FILTER ดึงเฉพาะค่าที่ตรงตามเงื่อนไขโดยไม่ต้องกำหนดช่วงแบบแน่นอน
  • รองรับการคืนค่าหลายรายการ: XLOOKUP ใช้คืนค่าเดี่ยว ส่วน FILTER สามารถคืนค่าเป็นช่วงข้อมูล
  • ความยืดหยุ่นสูง: ช่วยคัดกรองข้อมูลตามหลายเงื่อนไขได้ง่ายกว่าการซ้อนหลาย XLOOKUP
  • ทำงานร่วมกับ Dynamic Array ได้ดี: FILTER ปรับตัวกับข้อมูลที่เปลี่ยนแปลง ขณะที่ XLOOKUP ต้องระบุช่วงข้อมูลที่แน่นอน

📌 แต่ XLOOKUP ก็มีจุดเด่นของมัน:

  • หากต้องการ ค้นหาค่าที่เจาะจง และ ไม่มีหลายค่าที่ต้องคืนกลับ XLOOKUP อาจทำงานได้ตรงไปตรงมากว่า
  • สามารถใช้ค้นหาค่าที่ใกล้เคียง (Approximate Match) ได้ ซึ่ง FILTER ไม่รองรับโดยตรง

+++++++++++++++++++++++++++++++++

นี่คือข้อดีและข้อเสียของ FILTER และ XLOOKUP เพื่อช่วยให้คุณเลือกใช้ให้เหมาะสมกับงานของคุณ

🏆 FILTER

ข้อดี:

  • คืนค่าหลายรายการพร้อมกัน → ใช้คัดกรองข้อมูลตามเงื่อนไขโดยไม่ต้องเขียนสูตรซ้อนกัน
  • รองรับ Dynamic Array → ข้อมูลที่เปลี่ยนแปลงจะปรับตามอัตโนมัติ
  • สามารถกำหนดเงื่อนไขหลายรายการได้ง่าย → ใช้ AND หรือ OR ได้สะดวก

ข้อเสีย:

  • ไม่รองรับ Approximate Match → ไม่สามารถค้นหาค่าที่ใกล้เคียงที่สุดได้
  • ไม่สามารถค้นหาจากหลายตารางพร้อมกันโดยตรง → ต้องใช้สูตรช่วย เช่น VSTACK หรือ INDIRECT

🎯 XLOOKUP

ข้อดี:

  • สามารถค้นหาค่าที่ใกล้เคียงที่สุดได้ (Approximate Match) → ใช้ในงานคำนวณเช่น ช่วงคะแนน
  • รองรับค่าเริ่มต้นเมื่อไม่พบข้อมูล → ป้องกัน Error โดยสามารถกำหนดค่า Default ได้
  • ค้นหาจากหลายตารางได้ → ใช้หลาย Lookup Array ผ่าน IF หรือ CHOOSE ได้

ข้อเสีย:

  • คืนค่าได้เพียงหนึ่งค่าต่อเซลล์ → ไม่สามารถคืนค่าเป็น Dynamic Array ได้โดยตรง
  • ไม่ยืดหยุ่นเมื่อข้อมูลเปลี่ยนแปลง → ต้องใช้ OFFSET หรือ INDIRECT ช่วย

🧐 สรุป:

  • ใช้ FILTER ถ้าต้องการ คืนค่าหลายรายการ และรองรับ Dynamic Array
  • ใช้ XLOOKUP ถ้าต้องการ ค้นหาค่าที่แน่นอนหรือใกล้เคียง ในช่วงข้อมูล

+++++++++++++++++++++++++++++++++

เมื่อใช้ XLOOKUP กับ Dynamic Array คุณต้องระวังเรื่องช่วงข้อมูลที่อาจขยายหรือเปลี่ยนแปลงได้
วิธีที่แนะนำคือใช้ XLOOKUP ร่วมกับ Dynamic Array Functions เช่น SEQUENCE หรือ FILTER

ตัวอย่าง 1: ค้นหาค่าใน Dynamic Array

สมมติว่าคุณมีข้อมูลรายชื่อสินค้าอยู่ในช่วง A2:A10 และราคาสินค้าอยู่ใน B2:B10
แต่ช่วงข้อมูลนี้สามารถเปลี่ยนแปลงขนาดได้ (Dynamic Array)

=XLOOKUP("สินค้า1", A2:A10, B2:B10)

☑ คำสั่งนี้จะค้นหาราคา "สินค้า1" จากช่วงข้อมูลที่กำหนด

🏆 วิธีใช้ XLOOKUP ร่วมกับ FILTER สำหรับ Dynamic Array

หากต้องการค้นหาราคาเฉพาะสินค้าที่ตรงตามเงื่อนไข เช่น ราคามากกว่า 500
ใช้ FILTER เพื่อกำหนดช่วงข้อมูลให้เหมาะกับ Dynamic Array

=XLOOKUP("สินค้า1", FILTER(A2:A10, B2:B10>500), FILTER(B2:B10, B2:B10>500))

☑ สูตรนี้จะค้นหาสินค้าเฉพาะที่ราคามากกว่า 500 และใช้กับ Dynamic Array

🔄 XLOOKUP ร่วมกับ SEQUENCE สำหรับ Dynamic Array

ถ้าคุณต้องการ เลือกข้อมูลแถวที่เปลี่ยนแปลงตลอดเวลา เช่น ดึงข้อมูลจากคอลัมน์ที่เปลี่ยนแปลง
ลองใช้ SEQUENCE เพื่อกำหนดช่วง Dynamic Array

=XLOOKUP(1000, SEQUENCE(10,1,500,100), SEQUENCE(10,1,1000,100))

☑ สูตรนี้จะค้นหาค่าที่ใกล้เคียงกับ 1000 ในชุดตัวเลขที่สร้างขึ้นแบบ Dynamic

🚀 สรุป

  • XLOOKUP สามารถใช้ร่วมกับ FILTER เพื่อค้นหาข้อมูลที่ตรงเงื่อนไข
  • XLOOKUP ร่วมกับ SEQUENCE เหมาะกับการดึงค่าตามช่วงที่เปลี่ยนไป
  • เลือกช่วงข้อมูลที่ Dynamic Array รองรับ เพื่อให้สูตรทำงานได้ถูกต้อง

+++++++++++++++++++++++++++++++++

ผมถามกลับไปตามนี้

สูตรนี้ =XLOOKUP("สินค้า1", A2:A10, B2:B10) ถ้าช่วงข้อมูลเป็น dynamic array การที่อ้างอิง A2:A10 กับ B2:B10 ไว้ พอตารางที่เป็น dynamic array ขยายขนาดทั้งจำนวน column และจำนวน row
สูตร =XLOOKUP("สินค้า1", A2:A10, B2:B10) จะขยายตำแหน่งอ้่างอิงในวงเล็บตามไหม

Copilot ตอบ

สูตร =XLOOKUP("สินค้า1", A2:A10, B2:B10) จะ ไม่ขยายอัตโนมัติ ตามขนาดของ Dynamic Array หากตารางมีการขยายทั้งแถวและคอลัมน์
เนื่องจาก XLOOKUP ใช้ช่วงแบบ Fixed References (เช่น A2:A10, B2:B10) ซึ่งไม่ได้ปรับขนาดตาม Spilled Range

🔄 วิธีแก้ไขให้ XLOOKUP รองรับ Dynamic Array

ใช้ชื่อช่วงแบบ Dynamic Range:
ลองใช้ INDEX หรือ INDIRECT เพื่อช่วยกำหนดช่วงข้อมูลให้เปลี่ยนแปลงตาม Dynamic Array

=XLOOKUP("สินค้า1", A2:INDEX(A:A,ROWS(A2#)), B2:INDEX(B:B,ROWS(B2#)))

📌 สูตรนี้ใช้ A2# และ B2# เพื่อให้ XLOOKUP อ้างอิงช่วงข้อมูลที่ขยายอัตโนมัติ

ใช้ FILTER เพื่อช่วยกำหนดช่วง:

=XLOOKUP("สินค้า1", FILTER(A2:A100, A2:A100<>""), FILTER(B2:B100, A2:A100<>""))

📌 สูตรนี้ช่วยคัดกรองค่าที่มีอยู่จริง และปรับช่วงให้รองรับ Dynamic Array

🚀 สรุป

  • XLOOKUP ไม่สามารถปรับขนาดช่วงข้อมูลเอง → ต้องใช้ INDEX หรือ FILTER ช่วย
  • ช่วงที่เป็น Dynamic Array ใช้ # (Spilled Range) ได้ → เช่น A2# เพื่อให้ XLOOKUP ดึงข้อมูลที่ขยายอัตโนมัติ

คุณลองใช้กับข้อมูลที่มีอยู่หรือยังครับ? 😊

 



 

ความคิดเห็น

บทความที่ได้รับความนิยม