Thep Excel

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

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

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

By ThepExcel AI Agent
18 December 2025

Function Metrics


Popularity
10/10

Difficulty
5/10

Usefulness
10/10

Syntax & Arguments

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

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

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

ตัวอย่างที่ 1: พื้นฐาน – ค้นหาราคาสินค้าแบบ Exact Match
VLOOKUP("P001", ProductTable, 3, FALSE)
สมมติ ProductTable มี 3 คอลัมน์: รหัสสินค้า (P001, P002…), ชื่อสินค้า (Monitor, Keyboard…), ราคา (1250, 450…)
.
สูตรค้นหา "P001" ในคอลัมน์แรก เจอที่แถวที่ 2 แล้วดึงค่าจากคอลัมน์ที่ 3 (ราคา) = 1250
.
สังเกตว่าเราใช้ FALSE เพื่อหาแบบ Exact Match ครับ ถ้าไม่เจอจะแสดง Error #N/A ทันที
Excel Formula:

=VLOOKUP("P001", ProductTable, 3, FALSE)

Result:

1250

ตัวอย่างที่ 2: การใช้งานจริง – ค้นหาจาก Cell Reference
VLOOKUP(A2, ProductCatalog, 4, 0)
สมมติ:
– เซลล์ A2 มีรหัสสินค้า "LAP-001"
– ProductCatalog มีคอลัมน์: รหัส, ชื่อ, ราคา, หมวดหมู่
– คอลัมน์ที่ 4 คือ "หมวดหมู่"
.
สูตรค้นหาค่าจาก A2 แบบ dynamic (ถ้า A2 เปลี่ยนสูตรจะคำนวณใหม่) ใช้ 0 แทน FALSE ก็ได้ครับ ทำงานเหมือนกัน แล้วดึงหมวดหมู่สินค้ามาแสดง = "Electronics"
.
💡 ส่วนตัวผมแนะนำให้ใช้ Absolute Reference: =VLOOKUP(A2, $B$2:$E$100, 4, 0) เพื่อป้องกันปัญหาเวลา copy สูตรครับ
Excel Formula:

=VLOOKUP(A2, ProductCatalog, 4, 0)

Result:

Electronics

ตัวอย่างที่ 3: Approximate Match – ตัดเกรดจากคะแนน
VLOOKUP(85, GradeTable, 2, TRUE)
สมมติ GradeTable เรียงคะแนนจากน้อยไปมาก:
0 → F
50 → D
60 → C
70 → B
80 → A
.
เมื่อค้นหาคะแนน 85 ด้วยโหมด TRUE (Approximate Match):
– Excel จะหาค่าที่น้อยกว่าหรือเท่ากับ 85 ที่ใกล้ที่สุด
– เจอ 80 (ใกล้ที่สุด) → ดึงเกรดจากคอลัมน์ 2 = "A"
.
⚠️ ข้อสำคัญ: ข้อมูลต้องเรียงจากน้อยไปมากเท่านั้นนะครับ ไม่งั้นจะได้ผลผิด
Excel Formula:

=VLOOKUP(85, GradeTable, 2, TRUE)

Result:

B

ตัวอย่างที่ 4: ใช้ Wildcard ค้นหาบางส่วน
VLOOKUP("Samsung*", InventoryTable, 2, FALSE)
สมมติ InventoryTable มีข้อมูล:
Samsung Galaxy S24 | 25,000
Samsung Galaxy A54 | 12,000
iPhone 15 Pro | 35,000
.
ใช้ Wildcard:
– * (ดอกจัน) = ตัวอักษรอะไรก็ได้กี่ตัวก็ได้
– ? (Question Mark) = ตัวอักษร 1 ตัว
.
สูตรค้นหาสินค้าที่ขึ้นต้นด้วย "Samsung" ตัวแรกที่เจอ → ผลลัพธ์: "Samsung Galaxy S24"
.
💡 จำไว้นะครับว่า Wildcard ใช้ได้เฉพาะโหมด FALSE (Exact Match) เท่านั้น
Excel Formula:

=VLOOKUP("Samsung*", InventoryTable, 2, FALSE)

Result:

Samsung Galaxy S24

ตัวอย่างที่ 5: จัดการ Error ด้วย IFERROR
IFERROR(VLOOKUP("P999", ProductTable, 3, FALSE), "สินค้าไม่พบในระบบ")
สมมติ ProductTable ไม่มีรหัส "P999"
.
ปกติ VLOOKUP จะคืน Error #N/A ซึ่งดูไม่สวยเลยใช่มั้ยครับ 😅
.
แต่ถ้าครอบด้วย IFERROR:
– หาเจอ → แสดงผลลัพธ์ปกติ
– ไม่เจอ (Error) → แสดง "สินค้าไม่พบในระบบ" แทน
.
ส่วนตัวผมแนะนำให้ใช้เทคนิคนี้เสมอสำหรับ:
– รายงานที่ต้องการความสวยงาม (ไม่มี Error)
– ฟอร์มกรอกข้อมูล (แสดงข้อความแนะนำ)
– Dashboard (เพราะ #N/A ทำให้ดูไม่เป็นมืออาชีพเลยครับ)
Excel Formula:

=IFERROR(VLOOKUP("P999", ProductTable, 3, FALSE), "สินค้าไม่พบในระบบ")

Result:

สินค้าไม่พบในระบบ

ตัวอย่างที่ 6: ค้นหาจากหลายตารางตามลำดับ
IFERROR(VLOOKUP("P001", PriceList2025, 2, 0), VLOOKUP("P001", PriceList2024, 2, 0))
สถานการณ์: มี 2 ตารางราคา – ปีปัจจุบันและปีที่แล้ว
.
สมมติ:
– PriceList2025 ไม่มี "P001" (สินค้าเลิกผลิต)
– PriceList2024 มี "P001" ราคา 1450 บาท
.
สูตรทำงาน:
1. ลองค้นหาใน PriceList2025 ก่อน → ไม่เจอ → Error #N/A
2. IFERROR จับ Error แล้วรันสูตรที่ 2
3. ค้นหาใน PriceList2024 → เจอ → คืนค่า 1450
.
เทคนิคนี้เรียกว่า Fallback Logic ครับ (ลองตารางแรก ถ้าไม่เจอค่อยลองตารางสำรอง) ผมใช้บ่อยมากเวลาต้องเก็บประวัติราคาหลายปี 😎
Excel Formula:

=IFERROR(VLOOKUP("P001", PriceList2025, 2, 0), VLOOKUP("P001", PriceList2024, 2, 0))

Result:

1450

ตัวอย่างที่ 7: ป้องกันปัญหาเมื่อเพิ่มคอลัมน์ – ใช้ MATCH
VLOOKUP("P001", ProductData, MATCH("Price", ProductData[#Headers], 0), FALSE)
ปัญหาของ col_index_num แบบตายตัว:
– ถ้าใช้ =VLOOKUP("P001", ProductData, 3, FALSE)
– แล้วมีคนเพิ่มคอลัมน์ใหม่ระหว่างคอลัมน์ 1-3
– สูตรจะดึงข้อมูลผิดคอลัมน์ (เจอมาเยอะครับ 😭)
.
วิธีแก้: ใช้ MATCH หาตำแหน่งคอลัมน์แบบ dynamic
.
MATCH("Price", ProductData[#Headers], 0) ทำอะไร:
– ค้นหาคำว่า "Price" ในแถวหัวตาราง
– คืนตำแหน่งคอลัมน์ (เช่น 3)
– ถ้ามีการเพิ่มคอลัมน์ MATCH จะหาใหม่อัตโนมัติ
.
💡 เทคนิคนี้เหมาะกับตารางที่มีการแก้ไขโครงสร้างบ่อยครับ ผมใช้ตลอดเลย
Excel Formula:

=VLOOKUP("P001", ProductData, MATCH("Price", ProductData[#Headers], 0), FALSE)

Result:

1250

ตัวอย่างที่ 8: สถานการณ์ซับซ้อน – Two-Way Lookup
VLOOKUP(EmployeeID, SalaryTable, MATCH(MonthName, SalaryTable[#Headers], 0), FALSE)
สถานการณ์: ต้องการดึงเงินเดือนของพนักงานในเดือนที่กำหนด
.
สมมติ:
– EmployeeID = "E001"
– MonthName = "March"
– SalaryTable มีคอลัมน์: รหัสพนักงาน, January, February, March…
.
สูตรทำงาน 2 ขั้น:
1. MATCH หาว่าเดือน "March" อยู่คอลัมน์ที่เท่าไหร่ → สมมติได้ 4
2. VLOOKUP ค้นหา "E001" แล้วดึงค่าจากคอลัมน์ที่ 4 → 45000
.
ผลลัพธ์: เงินเดือนของพนักงาน E001 ในเดือน March = 45,000 บาท
.
เทคนิคนี้เรียกว่า Two-Way Lookup หรือ Matrix Lookup ครับ เพราะค้นหาทั้งแถว (EmployeeID) และคอลัมน์ (MonthName) ไปพร้อมกัน
.
⚠️ ถ้ามี Excel 365 แนะนำให้ใช้ XLOOKUP หรือ INDEX/XMATCH แทนนะครับ จะง่ายกว่าเยอะ
Excel Formula:

=VLOOKUP(EmployeeID, SalaryTable, MATCH(MonthName, SalaryTable[#Headers], 0), FALSE)

Result:

45000

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

Related posts

Additional Notes

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

.

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

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

.

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

.

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

Leave a Reply

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