Thep Excel

VLOOKUPฟังก์ชันค้นหาค่าแนวตั้งจากตาราง

VLOOKUP เป็นฟังก์ชันค้นหาแนวตั้งที่ได้รับความนิยมสูงสุดใน Excel โดยค้นหาค่าที่ต้องการในคอลัมน์ซ้ายสุดของตาราง จากนั้นดึงข้อมูลจากคอลัมน์ที่ระบุในแถวเดียวกัน รองรับทั้งการค้นหาแบบตรงทุกตัวอักษร (Exact Match) และแบบประมาณค่า (Approximate Match) สำหรับข้อมูลที่เรียงลำดับ ข้อจำกัดหลักคือต้องค้นหาจากคอลัมน์ซ้ายสุดเท่านั้น ไม่สามารถดึงข้อมูลจากด้านซ้ายของคอลัมน์ค้นหาได้

fx
=VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

ความนิยม10/10
ความยาก5/10
ประโยชน์10/10

อัปเดต 18 December 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
lookup_value any ค่าที่ต้องการค้นหาในคอลัมน์ซ้ายสุดของ table_array สามารถเป็นตัวเลข ข้อความ วันที่ หรือ cell reference ต้องมีค่านี้อยู่ในคอลัมน์แรกของตารางเพื่อให้หาเจอ
table_array range ช่วงตารางที่ใช้ค้นหาข้อมูล คอลัมน์แรกของช่วงนี้จะถูกใช้เป็นคอลัมน์ค้นหา และสามารถดึงข้อมูลจากคอลัมน์อื่นๆ ภายในช่วงนี้ ควรใช้ Absolute Reference ($A$1:$D$100) เพื่อป้องกันปัญหาเมื่อ copy สูตร
col_index_num number หมายเลขคอลัมน์ใน table_array ที่ต้องการดึงข้อมูล เริ่มนับที่ 1 สำหรับคอลัมน์ซ้ายสุด ตัวอย่าง: ถ้า table_array คือ A1:D10 แล้วต้องการดึงค่าจากคอลัมน์ C ให้ใส่ 3 ห้ามใส่เลขที่เกินจำนวนคอลัมน์ใน table_array จะเกิด Error #REF!
[range_lookup]ไม่บังคับ logical TRUE กำหนดประเภทการค้นหา: FALSE หรือ 0 = Exact Match (ตรงทุกตัวอักษร) เหมาะกับ ID รหัสสินค้า, TRUE หรือ 1 = Approximate Match (หาค่าที่ใกล้เคียงที่สุด) ต้องเรียงข้อมูลจากน้อยไปมาก ใช้กับช่วงคะแนน ช่วงราคา ถ้าไม่ระบุจะเป็น TRUE ซึ่งเป็นสาเหตุหลักของความผิดพลาด

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

VLOOKUP เป็นฟังก์ชันที่ได้รับความนิยมสูงสุดใน Excel มากว่า 20 ปีแล้วครับ 😊

มันทำงานแบบง่ายๆ คือ ค้นหาข้อมูลแนวตั้ง (Vertical Lookup) โดยหาค่าในคอลัมน์ซ้ายสุดของตาราง แล้วดึงข้อมูลจากคอลัมน์อื่นในแถวเดียวกันมาแสดง เหมาะมากสำหรับงานแบบ:

  • ค้นหาราคาสินค้าจากรหัส 💰
  • ดึงชื่อพนักงานจากรหัส 👥
  • หาข้อมูลจากตารางอ้างอิง 📋

แต่… VLOOKUP มีข้อจำกัดสำคัญที่ต้องระวังนะครับ 😅 คือต้องค้นหาจากคอลัมน์ซ้ายสุดของตารางเท่านั้น และไม่สามารถดึงข้อมูลจากด้านซ้ายของคอลัมน์ค้นหาได้ (ซึ่งเป็นปัญหาที่หลายคนติดมาก)

ถ้ามี Excel 365 หรือ 2021 ส่วนตัวผมแนะนำให้ลองเรียนรู้ XLOOKUP แทนนะครับ เพราะทำงานได้ทุกอย่างที่ VLOOKUP ทำได้ แถมยืดหยุ่นและเร็วกว่าด้วย 🚀

How it works

ค้นหาราคาสินค้าจากรหัส

ใช้รหัสสินค้าในคอลัมน์ซ้ายสุดของตาราง Product Catalog แล้วดึงราคา ชื่อสินค้า หรือรายละเอียดอื่นๆ จากคอลัมน์ถัดไป เหมาะสำหรับงานใบเสนอราคา ใบสั่งซื้อ

ตัดเกรดนักเรียนจากคะแนน

ใช้ Approximate Match (TRUE) กับตารางเกรดที่เรียงคะแนนจากน้อยไปมาก เพื่อหาเกรดที่ตรงกับคะแนนที่ได้ เช่น 0-49=F, 50-59=D, 60-69=C

คำนวณค่าคอมมิชชั่นตามยอดขาย

สร้างตารางอัตราคอมมิชชั่นตามช่วงยอดขาย (0-10000=3%, 10001-50000=5%, 50001+=7%) ใช้ VLOOKUP แบบ Approximate Match เพื่อหาอัตราที่เหมาะสม

ดึงข้อมูลพนักงานจากรหัส

ค้นหารหัสพนักงานในฐานข้อมูล HR แล้วดึงชื่อ แผนก เบอร์โทร อีเมล หรือตำแหน่งงานมาแสดงในฟอร์มหรือรายงาน

จับคู่รหัสไปรษณีย์กับจังหวัด

ใช้รหัสไปรษณีย์ค้นหาชื่อจังหวัด อำเภอ หรือภูมิภาค เพื่อเติมข้อมูลที่อยู่อัตโนมัติในระบบจัดส่งสินค้า

Examples

ตารางสินค้าProductTableA1:D6
A B C D
1 รหัสสินค้า ชื่อสินค้า สถานะ ราคา
2 P001 เมาส์ไร้สาย ปิด 590
3 P002 คีย์บอร์ด เปิด 1,290
4 P003 จอ 27 นิ้ว ปิด 8,900
5 P004 หูฟัง เปิด 2,450
6 P005 เว็บแคม ปิด 1,750

ทุกสูตรด้านล่างอ้างถึงตารางนี้ พิมพ์ตามได้เลย ผลลัพธ์จะตรงกับที่เขียนไว้

ตารางตัดเกรด (เรียงคะแนนจากน้อยไปมาก)GradeTableF1:G6
A B
1 คะแนนขั้นต่ำ เกรด
2 0 F
3 50 D
4 60 C
5 70 B
6 80 A

ตารางนี้ใช้กับการค้นหาแบบใกล้เคียง (TRUE) ซึ่งบังคับว่าคอลัมน์แรกต้องเรียงจากน้อยไปมาก

ตัวอย่างที่ 1: พื้นฐาน – ค้นหาราคาสินค้าแบบ Exact MatchVLOOKUP("P003", A2:D6, 4, FALSE)

สูตรค้นหา "P003" ในคอลัมน์แรกของช่วง A2:D6 เจอที่แถวที่สาม แล้วดึงค่าจากคอลัมน์ที่ 4 ของช่วงนั้น ซึ่งก็คือราคา 8,900 บาท

เลข 4 นับจากคอลัมน์แรกของช่วงที่เราเลือก ไม่ใช่นับจากคอลัมน์ A ของชีต ตรงนี้พลาดกันบ่อยมากครับ

ตัวสุดท้ายใส่ FALSE เพราะต้องการให้ตรงเป๊ะเท่านั้น ถ้าไม่เจอจะได้ #N/A ทันที ไม่ไปเดาค่าใกล้เคียงให้

fx
=VLOOKUP("P003", A2:D6, 4, FALSE)

ผลลัพธ์8900
ตัวอย่างที่ 2: ค้นหาจากเซลล์อ้างอิงแทนการพิมพ์ค่าตรงๆVLOOKUP(A4, A2:D6, 2, 0)

แทนที่จะพิมพ์ "P003" ลงไปในสูตร เราชี้ไปที่เซลล์ A4 ซึ่งเก็บรหัสนั้นอยู่ พอค่าใน A4 เปลี่ยน ผลลัพธ์ก็เปลี่ยนตามทันที

เวลาทำงานจริงเซลล์นั้นมักเป็นช่องที่ผู้ใช้กรอกรหัสเข้ามาครับ สูตรเดียวใช้ได้กับทุกรหัส

สังเกตว่าใส่ 0 แทน FALSE ได้ผลเหมือนกันเป๊ะ เป็นเรื่องความเคยชินล้วนๆ

fx
=VLOOKUP(A4, A2:D6, 2, 0)

ผลลัพธ์จอ 27 นิ้ว
ตัวอย่างที่ 3: Approximate Match – ตัดเกรดจากคะแนนVLOOKUP(85, F2:G6, 2, TRUE)

คราวนี้ใช้ตารางเกรดทางขวา และเปลี่ยนตัวสุดท้ายเป็น TRUE ซึ่งแปลว่าหาค่าที่ใกล้เคียง

คะแนน 85 ไม่มีอยู่ในตาราง Excel จึงไล่หาค่าที่มากที่สุดที่ยังไม่เกิน 85 ซึ่งก็คือ 80 แล้วคืนเกรดของแถวนั้นออกมาเป็น A

เงื่อนไขที่ห้ามลืมคือคอลัมน์แรกต้องเรียงจากน้อยไปมาก ถ้าไม่เรียง Excel จะไม่ฟ้องอะไรเลยแต่คืนค่าผิด ซึ่งอันตรายกว่าการขึ้น error เยอะ

fx
=VLOOKUP(85, F2:G6, 2, TRUE)

ผลลัพธ์A
ตัวอย่างที่ 4: ใช้ Wildcard ค้นหาแบบรู้แค่บางส่วนVLOOKUP("P00?", A2:D6, 2, FALSE)

เครื่องหมาย ? แทนตัวอักษรหนึ่งตัว ส่วน * แทนกี่ตัวก็ได้ สูตรนี้จึงหมายถึงรหัสที่ขึ้นต้น P00 แล้วตามด้วยอะไรอีกหนึ่งตัว

ในตารางมีทั้ง P001 ถึง P005 ที่เข้าเงื่อนไข แต่ VLOOKUP คืนแค่ตัวแรกที่เจอจากบนลงล่าง ซึ่งคือ P001 เมาส์ไร้สาย

wildcard ใช้ได้เฉพาะโหมด FALSE เท่านั้นนะครับ ใส่คู่กับ TRUE จะไม่ทำงาน

fx
=VLOOKUP("P00?", A2:D6, 2, FALSE)

ผลลัพธ์เมาส์ไร้สาย
ตัวอย่างที่ 5: จัดการ Error ด้วย IFERRORIFERROR(VLOOKUP("P099", A2:D6, 2, FALSE), "ไม่พบสินค้านี้")

ในตารางไม่มีรหัส P099 ปกติ VLOOKUP จะคืน #N/A ซึ่งพอไปอยู่ในรายงานหรือ dashboard แล้วดูไม่เรียบร้อยเลย

พอครอบด้วย IFERROR ถ้าหาเจอก็แสดงผลปกติ ถ้าไม่เจอก็แสดงข้อความที่เรากำหนดแทน

ผมใช้ท่านี้แทบทุกครั้งที่สูตรจะไปโผล่ในหน้าที่คนอื่นดูครับ

fx
=IFERROR(VLOOKUP("P099", A2:D6, 2, FALSE), "ไม่พบสินค้านี้")

ผลลัพธ์ไม่พบสินค้านี้
ตัวอย่างที่ 6: เอาผลลัพธ์ไปคำนวณต่อได้ทันทีVLOOKUP("P003", A2:D6, 4, FALSE)*0.93

VLOOKUP คืนตัวเลขออกมา เลยเอาไปคูณลดราคา 7% ต่อได้เลยในสูตรเดียว ไม่ต้องพักค่าไว้ในเซลล์อื่นก่อน

8,900 คูณ 0.93 ได้ 8,277 บาท

เวลาทำใบเสนอราคาผมชอบเขียนแบบนี้ครับ เพราะพอราคาในตารางแม่เปลี่ยน ทุกอย่างที่คำนวณต่อจากมันก็อัปเดตเองหมด

fx
=VLOOKUP("P003", A2:D6, 4, FALSE)*0.93

ผลลัพธ์8277
ตัวอย่างที่ 7: ป้องกันปัญหาเมื่อมีคนเพิ่มคอลัมน์ – ใช้ MATCHVLOOKUP("P003", A2:D6, MATCH("ราคา", A1:D1, 0), FALSE)

ปัญหาของการใส่เลขคอลัมน์ตายตัวคือ พอมีคนแทรกคอลัมน์ใหม่เข้ามากลางตาราง สูตรจะดึงผิดคอลัมน์ทันทีโดยไม่มีอะไรเตือน

วิธีแก้คือให้ MATCH ไปหาเองว่าคำว่า "ราคา" อยู่คอลัมน์ที่เท่าไหร่ของแถวหัวตาราง แล้วส่งเลขนั้นให้ VLOOKUP ใช้

พอโครงสร้างตารางเปลี่ยน MATCH ก็หาใหม่ให้อัตโนมัติ สูตรไม่พังตามครับ

fx
=VLOOKUP("P003", A2:D6, MATCH("ราคา", A1:D1, 0), FALSE)

ผลลัพธ์8900
ตัวอย่างที่ 8: รวมสองเทคนิค – ใกล้เคียง + หาคอลัมน์อัตโนมัติVLOOKUP(75, F2:G6, MATCH("เกรด", F1:G1, 0), TRUE)

คราวนี้เอาสองอย่างมารวมกัน MATCH หาว่าคอลัมน์ "เกรด" อยู่ตำแหน่งที่เท่าไหร่ของตารางเกรด แล้ว TRUE ทำให้ค้นหาแบบใกล้เคียง

คะแนน 75 ไม่มีในตาราง จึงตกไปที่ 70 ซึ่งเป็นขั้นที่ใกล้ที่สุดโดยไม่เกิน แล้วได้เกรด B

ถ้าใช้ Excel 365 หรือ 2021 ผมแนะนำให้เปลี่ยนไปใช้ XLOOKUP แทนครับ เขียนสั้นกว่าและไม่ต้องนับคอลัมน์เลย

fx
=VLOOKUP(75, F2:G6, MATCH("เกรด", F1:G1, 0), TRUE)

ผลลัพธ์B

FAQs

ทำไม VLOOKUP คืนค่าผิด แม้ว่าข้อมูลมีอยู่ในตาราง?+

ปัญหานี้เจอบ่อยมากครับ 😅 สาเหตุหลักๆ มี 5 ข้อ:

1. **ใช้ range_lookup ผิด**: ใช้ TRUE (หรือไม่ใส่ argument ที่ 4) โดยไม่ได้เรียงข้อมูล ทำให้ได้ผลผิดแต่ดูเหมือนถูก → แก้: ใส่ FALSE เสมอสำหรับ Exact Match

2. **ข้อมูลไม่ตรงชนิด**: เช่น ค้นหาเลข 001 แต่ในตารางเก็บเป็นข้อความ "001" → แก้: ใช้ TEXT() หรือ VALUE() แปลงให้ชนิดเดียวกัน

3. **มีช่องว่างซ่อน**: ข้อมูลมีเว้นวรรคหน้าหรือหลังที่มองไม่เห็น (เจอบ่อยมากถ้าดึงจาก CSV) → แก้: ใช้ TRIM() กำจัดช่องว่าง

4. **col_index_num นับผิด**: เริ่มนับที่ 1 ไม่ใช่ 0 และต้องนับจากคอลัมน์แรกของ table_array ไม่ใช่คอลัมน์ A นะครับ → แก้: นับใหม่ให้ถูกต้อง

5. **คอลัมน์ค้นหาไม่ใช่คอลัมน์ซ้ายสุด**: VLOOKUP ค้นหาจากคอลัมน์ซ้ายสุดเท่านั้น → แก้: จัดเรียงคอลัมน์ใหม่ หรือใช้ INDEX/MATCH

VLOOKUP กับ XLOOKUP ต่างกันอย่างไร ควรใช้อันไหน?+

คำถามนี้ถามกันเยอะมากครับ 😊

**ข้อจำกัดของ VLOOKUP:**
– ต้องค้นหาจากคอลัมน์ซ้ายสุดเท่านั้น (ไม่สามารถค้นหาย้อนกลับ)
– col_index_num เป็นตัวเลขคงที่ เปราะเมื่อเพิ่ม/ลบคอลัมน์
– Default เป็น Approximate Match (อันตรายมาก)
– ช้ากว่าเมื่อข้อมูลเยอะ

**ข้อดีของ XLOOKUP:**
– ค้นหาได้จากคอลัมน์ใดก็ได้ ดึงข้อมูลจากด้านไหนก็ได้
– ระบุช่วงค้นหาและช่วงผลลัพธ์แยกกัน ไม่ต้องนับคอลัมน์
– Default เป็น Exact Match (ปลอดภัยกว่า)
– รองรับการค้นหาย้อนกลับ (จากล่างขึ้นบน)
– มี built-in error handling
– เร็วกว่าเยอะ (Binary Search)

**คำแนะนำจากผม:**
– มี Excel 365/2021+ → ใช้ XLOOKUP เลยครับ
– Excel เวอร์ชันเก่า → ใช้ VLOOKUP หรือ INDEX/MATCH
– ต้องส่งไฟล์ให้คนอื่น (Backward Compatible) → ใช้ VLOOKUP

ควรใช้ FALSE หรือ TRUE ใน range_lookup เมื่อไหร?+

**ใช้ FALSE (Exact Match) เมื่อ:**
– ค้นหา Unique ID (รหัสพนักงาน, รหัสสินค้า)
– ค้นหาชื่อ, ข้อความ
– ต้องการผลลัพธ์ที่ตรงทุกตัวอักษรเท่านั้น
– ข้อมูลไม่ได้เรียงลำดับ
– ใช้ Wildcard (* หรือ ?)

**ใช้ TRUE (Approximate Match) เมื่อ:**
– ตัดเกรดจากคะแนน (0-49=F, 50-59=D, 60-69=C…)
– หาอัตราส่วนลดตามยอดซื้อ (0-1000=0%, 1001-5000=5%…)
– คำนวณค่าคอมมิชชั่นตามช่วงยอดขาย
– ข้อมูลเรียงจากน้อยไปมากและต้องการหาค่าช่วง

⚠️ **อันตรายที่เจอบ่อยมาก:**
ผู้ใช้ส่วนใหญ่ไม่รู้ว่าถ้าไม่ใส่ argument ที่ 4 จะเป็น TRUE อัตโนมัติ ทำให้ได้ผลผิดโดยไม่รู้ตัว 😭

💡 **ส่วนตัวผมแนะนำ:** ใส่ FALSE เสมอเมื่อไม่แน่ใจ เพราะ Exact Match ปลอดภัยกว่าเยอะครับ

VLOOKUP คืน Error #N/A หมายความว่าอะไร และแก้อย่างไร?+

Error #N/A แปลว่า "Not Available" – ไม่พบข้อมูลที่ค้นหาครับ

**สาเหตุที่เจอบ่อยมาก:**

1. **ค่าที่ค้นหาไม่มีจริงในคอลัมน์แรก**
– ตรวจสอบ: เปิด Find (Ctrl+F) ค้นหาในคอลัมน์แรกของ table_array
– แก้: ตรวจสอบการสะกดคำ, ช่องว่าง, ตัวพิมพ์ใหญ่เล็ก (แม้ว่า VLOOKUP ไม่สน Case)

2. **ใช้ TRUE แต่ lookup_value น้อยกว่าค่าต่ำสุดในตาราง**
– ตัวอย่าง: ค้นหาคะแนน 45 แต่ตารางเริ่มที่ 50 → จบเลย
– แก้: เพิ่มแถว 0 หรือใช้ FALSE แทน

3. **มีช่องว่างหรือตัวอักษรพิเศษซ่อน** (เจอบ่อยมากถ้าดึงจากระบบอื่น)
– แก้: =VLOOKUP(TRIM(A2), …)

4. **Data Type ไม่ตรงกัน** (ตัวเลขกับข้อความ)
– แก้: =VLOOKUP(TEXT(A2,"0"), …) หรือ =VLOOKUP(VALUE(A2), …)

**วิธีจัดการ Error:**
“`
=IFERROR(VLOOKUP(…), "ไม่พบข้อมูล")
=IFNA(VLOOKUP(…), 0)
=IF(ISNA(VLOOKUP(…)), "สินค้าหมด", VLOOKUP(…))
“`

ส่วนตัวผมชอบใช้ IFERROR มากที่สุดครับ เพราะสั้นและอ่านง่าย

ทำไม VLOOKUP ดึงข้อมูลจากด้านซ้ายของคอลัมน์ค้นหาไม่ได้?+

นี่คือข้อจำกัดที่หลายคนติดครับ 😅

**VLOOKUP มีข้อจำกัดโดยออกแบบ:** คอลัมน์ค้นหาต้องอยู่ซ้ายสุดของ table_array เสมอ และดึงข้อมูลจากด้านขวาเท่านั้น

**ตัวอย่างปัญหา:**
ตาราง: ชื่อสินค้า | รหัสสินค้า | ราคา
ต้องการ: ค้นหาจากรหัส แล้วดึงชื่อสินค้า (ซึ่งอยู่ด้านซ้าย) → ทำไม่ได้ด้วย VLOOKUP

**วิธีแก้ 3 วิธี:**

**1. จัดเรียงคอลัมน์ใหม่** (วิธีง่ายที่สุด)
– เปลี่ยนเป็น: รหัสสินค้า | ชื่อสินค้า | ราคา
– =VLOOKUP("P001", A:C, 2, FALSE)

**2. ใช้ INDEX + MATCH** (ส่วนตัวผมแนะนำวิธีนี้)
“`
=INDEX(A:A, MATCH("P001", B:B, 0))
“`
– INDEX ดึงค่าจากคอลัมน์ A (ชื่อสินค้า)
– MATCH หาตำแหน่งแถวที่รหัส "P001" อยู่ในคอลัมน์ B
– ไม่จำกัดทิศทาง ยืดหยุ่นสูง

**3. ใช้ XLOOKUP** (Excel 365 เท่านั้น)
“`
=XLOOKUP("P001", B:B, A:A)
“`
– ง่ายที่สุด ค้นหาได้จากทิศทางใดก็ได้
– ถ้ามี Excel 365 ใช้อันนี้เลยครับ

VLOOKUP คืนค่าแรกเท่านั้นเมื่อมีข้อมูลซ้ำ จะดึงค่าอื่นได้ไหม?+

ใช่ครับ นี่คือข้อจำกัดอีกอันของ VLOOKUP 😅

**พฤติกรรมของ VLOOKUP:** เมื่อมีข้อมูลซ้ำหลายแถว จะคืนค่าจากแถวแรกที่เจอเท่านั้น ไม่มีทางดึงค่าที่ 2, 3, 4… ได้ด้วย VLOOKUP

**ตัวอย่างปัญหา:**
รหัสพนักงาน | วันที่ขาย | ยอดขาย
E001 | 01/01/2024 | 10,000
E001 | 02/01/2024 | 15,000
E001 | 03/01/2024 | 20,000

=VLOOKUP("E001", A:C, 3, FALSE) → จะได้ 10,000 เท่านั้น (แถวแรก)

**วิธีแก้ตามสถานการณ์:**

**1. รวมข้อมูลทั้งหมด** (ถ้าต้องการผลรวม)
“`
=SUMIF(A:A, "E001", C:C) → 45,000
“`

**2. ดึงทุกค่าที่ตรง** (Excel 365)
“`
=FILTER(C:C, A:A="E001")
“`
→ คืนค่า Array: {10000; 15000; 20000}

**3. ดึงค่าที่ N** (แถวที่ 2, 3…)
“`
=INDEX(C:C, SMALL(IF(A:A="E001", ROW(A:A)), 2))
“`
→ Array Formula ดึงค่าการขายครั้งที่ 2 ของ E001

**4. ใช้ Helper Column**
– เพิ่มคอลัมน์: รหัส + ลำดับ (E001-1, E001-2, E001-3)
– VLOOKUP ค้นหา "E001-2" แทน

💡 ส่วนตัวผมแนะนำให้ใช้ FILTER ใน Excel 365 ครับ เพราะออกแบบมาสำหรับเรื่องนี้โดยเฉพาะ

Error #REF! เกิดขึ้นเมื่อไหร และแก้อย่างไร?+

**Error #REF! = Invalid Reference (อ้างอิงผิด)**

**สาเหตุหลัก:**

**1. col_index_num เกินจำนวนคอลัมน์ใน table_array**
– ตัวอย่าง: table_array คือ A1:C10 (3 คอลัมน์) แต่ใส่ col_index_num = 5
– แก้: เปลี่ยนเป็น 1, 2, หรือ 3

**2. ลบคอลัมน์ใน table_array จนเกิน col_index_num**
– เดิมมี 5 คอลัมน์ ใช้ col_index_num = 5
– ลบคอลัมน์ 2 คอลัมน์ เหลือ 3 คอลัมน์
– col_index_num = 5 เกินจำนวนคอลัมน์ → #REF!
– แก้: ใช้ MATCH แทนตัวเลขคงที่

**3. table_array อ้างอิงคอลัมน์ที่ถูกลบไปแล้ว**
– สูตรเดิม: =VLOOKUP(A2, B2:E10, 3, 0)
– ลบคอลัมน์ D → table_array เหลือ B2:D10 แต่ Excel ไม่ Adjust
– แก้: ใช้ Named Range หรือ Table Reference

**วิธีป้องกัน Error #REF!:**

**1. ใช้ Excel Table** (แนะนำที่สุด)
“`
=VLOOKUP(A2, ProductTable, 3, 0)
“`
– ถ้าลบ/เพิ่มคอลัมน์ Table จะ Adjust อัตโนมัติ

**2. ใช้ MATCH หา col_index_num**
“`
=VLOOKUP(A2, B:E, MATCH("Price", B1:E1, 0), 0)
“`
– ลบคอลัมน์ไปกี่คอลัมน์ MATCH ก็หาใหม่

**3. ใช้ Named Range**
– สร้าง Named Range = "ProductData"
– =VLOOKUP(A2, ProductData, 3, 0)
– ปรับช่วง Named Range เมื่อมีการเปลี่ยนแปลง

VLOOKUP ช้ามากเมื่อข้อมูลเยอะ จะเร่งความเร็วได้ไหม?+

**ปัญหา:** VLOOKUP ใช้ Linear Search (ค้นหาทีละแถวจนเจอ) ทำให้ช้าเมื่อข้อมูลหลักหมื่น-แสนแถว

**เทคนิคเร่งความเร็ว 8 วิธี:**

**1. ใช้ Exact Match (FALSE) แทน Approximate (TRUE)**
– FALSE เร็วกว่าเพราะหยุดทันทีที่เจอ
– TRUE ต้องเช็คทุกแถวจนเจอค่าที่ใหญ่กว่า

**2. เรียงข้อมูล + ใช้ TRUE**
– ถ้าเรียงแล้ว TRUE จะใช้ Binary Search (เร็วมาก)
– แต่ต้องแน่ใจว่าเรียงถูกต้อง

**3. จำกัด table_array ให้เล็กที่สุด**
– ❌ =VLOOKUP(A2, A:Z, 3, 0) → ช้า (ค้นหา 1 ล้านแถว)
– ✅ =VLOOKUP(A2, A2:C5000, 3, 0) → เร็ว (ค้นหา 5000 แถว)

**4. ใช้ INDEX + MATCH แทน VLOOKUP**
“`
=INDEX(C:C, MATCH(A2, B:B, 0))
“`
– เร็วกว่า 10-20% ในข้อมูลขนาดใหญ่

**5. ใช้ XLOOKUP (Excel 365)**
“`
=XLOOKUP(A2, B:B, C:C)
“`
– ใช้ Binary Search โดยอัตโนมัติ เร็วกว่า VLOOKUP มาก

**6. แปลงเป็น Excel Table**
– Table มี Indexing ทำให้ค้นหาเร็วขึ้น
– =VLOOKUP(A2, ProductTable, 3, 0)

**7. ใช้ Helper Column แทน Nested Function**
– ❌ =VLOOKUP(TRIM(A2), …, UPPER(…), 0) → ช้า
– ✅ แยกทำ Helper Column ก่อน แล้วค้นหา Column นั้น

**8. ใช้ Power Query (ข้อมูลเกิน 100,000 แถว)**
– Merge Queries ทำงานเร็วกว่าสูตรมาก
– โหลดผลลัพธ์เป็น Table ไม่ต้องคำนวณซ้ำ

💡 **Benchmark (100,000 แถว):**
– VLOOKUP: ~5 วินาที
– INDEX/MATCH: ~4 วินาที
– XLOOKUP: ~2 วินาที
– Power Query: ~0.5 วินาที

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ VLOOKUP จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้VLOOKUPLookup and reference
Lookup and reference (11)
CHOOSE

CHOOSE เลือกค่าจากรายการค่าตามหมายเลขลำดับที่ระบุ เป็นเหมือนการเลือกรายการจากเมนู ส่งคืนค่าที่ตำแหน่งที่กำหนด มีประโยชน์ในการสร้างสูตรแบบเลือกตามเงื่อนไข

COLUMNS

นับจำนวนคอลัมน์ทั้งหมดในช่วงข้อมูลหรืออาร์เรย์ที่ระบุ ใช้บ่อยคู่กับ OFFSET หรือ VLOOKUP เพื่อทำสูตรแบบ dynamic ที่ปรับตามขนาดตารางเอง

GETPIVOTDATA

GETPIVOTDATA ช่วยดึงข้อมูลจาก PivotTable โดยอ้างอิงชื่อฟิลด์และเงื่อนไข แทนที่จะอ้างอิงตำแหน่งเซลล์
.
เหมาะสำหรับการสร้างรายงานแบบไดนามิกและการวิเคราะห์ข้อมูลที่ต้องการความแม่นยำสูง เพราะสูตรจะยังคงทำงานได้ถูกต้องแม้ PivotTable จะเปลี่ยนแปลง 💡

HLOOKUP

HLOOKUP ค้นหาข้อมูลจากแถวแรกของตาราง แล้วคืนค่าจากแถวที่ระบุ ตรงข้ามกับ VLOOKUP ที่ค้นหาแนวตั้ง เหมาะสำหรับตารางที่หัวข้อมูลเรียงแบบแนวนอน

INDEX

INDEX คืนค่าหรือ reference ของเซลล์จากตำแหน่งที่ระบุใน range หรือ array โดยอ้างอิงจากหมายเลขแถวและคอลัมน์ที่เราระบุ มักถูกใช้ร่วมกับ MATCH เพื่อสร้าง INDEX-MATCH pattern ที่ยืดหยุ่นกว่า VLOOKUP เยอะ เพราะสามารถดึงข้อมูลจากทิศทางไหนก็ได้ และไม่พังเมื่อมีการแทรกหรือลบคอลัมน์

INDIRECT

INDIRECT แปลงข้อความเป็นการอ้างอิงเซลล์จริง ช่วยให้สามารถเปลี่ยนตำแหน่งเซลล์ได้ไดนามิกโดยใช้ตัวเลขหรือชื่อเซลล์

LOOKUP

LOOKUP ค้นหาค่าในช่วงข้อมูลที่เรียงลำดับแล้ว (ascending) และคืนค่าจากตำแหน่งเดียวกันในอีกช่วงหนึ่ง มีเทคนิคพิเศษคือหาค่าสุดท้ายที่ไม่ว่าง แนะนำใช้ XLOOKUP แทนสำหรับ Excel 365

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

RTD

ฟังก์ชัน RTD ใช้สำหรับดึงข้อมูลแบบ Real-time จากโปรแกรมที่รองรับ COM automation เช่น ราคาหุ้น อัตราแลกเปลี่ยน หรือข้อมูลที่มีการอัพเดทอย่างต่อเนื่อง
.
ที่เจ๋งคือ RTD จะอัพเดทข้อมูลโดยอัตโนมัติเมื่อ Excel อยู่ในโหมดคำนวณอัตโนมัติ ไม่ต้องนั่งกด F9 หรือรีเฟรชด้วยตนเอง ซึ่งเหมาะมากสำหรับการติดตามข้อมูลตลาดการเงิน การวิเคราะห์หุ้น หรือการเชื่อมต่อกับ Data Server ภายนอก

XLOOKUP

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

XMATCH

XMATCH คืนค่าตำแหน่งของข้อมูลที่ค้นหาในช่วงหรืออาร์เรย์ ถือเป็นฟังก์ชันรุ่นใหม่ที่ Microsoft พัฒนามาแก้จุดอ่อนของ MATCH โดยเฉพาะเรื่องค่า Default ที่เป็น Exact Match แทน Approximate Match ทำให้ใช้ง่ายและปลอดภัยกว่ามาก นอกจากนี้ยังรองรับการค้นหาย้อนกลับ Binary Search สำหรับข้อมูลขนาดใหญ่ และการค้นหาแบบ Wildcard ทำให้ยืดหยุ่นกว่า MATCH เดิมหลายเท่า

Logical (1)
IFNA

IFNA เป็นฟังก์ชันที่ช่วยจัดการ #N/A errors โดยแทนค่าเป็นข้อความหรือค่าอื่นที่คุณกำหนด เหมาะสำหรับการค้นหาข้อมูลที่อาจไม่พบผลลัพธ์

Information (1)
ISNA

ISNA ตรวจสอบเฉพาะ Error #N/A ที่เกิดจากการค้นหาไม่เจอในฟังก์ชันต่างๆ เช่น VLOOKUP หรือ MATCH มีประโยชน์มากเมื่อต้องแยกแยะระหว่าง "หาไม่เจอ" กับ "สูตรคิดผิด"

Statistical (1)
PIVOTBY

PIVOTBY เป็นฟังก์ชัน Excel 365 ที่สร้าง Pivot Table แบบไดนามิก โดยกำหนด Row Fields, Column Fields และ Values ผ่านสูตร พร้อมตั้งค่าการแสดงผลรวมและการเรียงลำดับได้ทันที

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่