การสร้างสูตร Vlookup ข้ามชีทใน Excel
· อ่านประมาณ 15 นาที
ในงานจริง ข้อมูลที่ต้องใช้มักไม่ได้อยู่ในชีทเดียวกัน เช่น ชีท "ใบสั่งซื้อ" มีแค่รหัสสินค้า แต่ชื่อสินค้าและราคาอยู่ในชีท "สินค้า" หรือชีทรายชื่อพนักงานอยู่แยกจากชีทเงินเดือน การเขียนสูตร VLOOKUP ข้ามชีทใน Excel คือวิธีดึงข้อมูลจากอีกชีทมาแสดงอัตโนมัติ ไม่ต้องคัดลอกวางเอง
บทความนี้สอนทีละขั้น ตั้งแต่วิธีสร้างสูตร VLOOKUP ข้ามชีทแบบคลิกเลือก การพิมพ์ชื่อชีทเอง การล็อกช่วงข้อมูล การค้นหาข้ามไฟล์ ค้นหาจากหลายชีท และวิธีแก้ error ที่เจอบ่อย
ข้อมูลตัวอย่าง
ไฟล์มี 2 ชีท
ชีท "สินค้า" (ตารางข้อมูลหลัก ช่วง A1:D7)
| A: รหัสสินค้า | B: ชื่อสินค้า | C: ราคาต่อหน่วย | D: หน่วย | |
|---|---|---|---|---|
| 2 | P001 | กระดาษ A4 80 แกรม | 125 | รีม |
| 3 | P002 | ปากกาลูกลื่น สีน้ำเงิน | 8 | ด้าม |
| 4 | P003 | แฟ้มสันกว้าง 3 นิ้ว | 89 | เล่ม |
| 5 | P004 | หมึกพิมพ์ สีดำ | 690 | ตลับ |
| 6 | P005 | เทปกาวใส | 25 | ม้วน |
| 7 | P006 | ลวดเย็บกระดาษ | 15 | กล่อง |

ชีท "ใบสั่งซื้อ" มีคอลัมน์ A = รหัสสินค้า, B = ชื่อสินค้า, C = ราคาต่อหน่วย, D = จำนวน, E = จำนวนเงิน เราต้องการให้พิมพ์แค่รหัสสินค้ากับจำนวน แล้วชื่อสินค้าและราคาขึ้นมาเอง
โครงสร้างสูตร VLOOKUP ข้ามชีท
=VLOOKUP(ค่าที่ค้นหา, ชื่อชีท!ช่วงข้อมูล, ลำดับคอลัมน์, FALSE)
สิ่งที่ต่างจาก VLOOKUP ในชีทเดียวกันมีแค่จุดเดียว คือใส่ชื่อชีทตามด้วยเครื่องหมาย ! นำหน้าช่วงข้อมูล เช่น สินค้า!$A$2:$D$7 หมายถึงช่วง A2:D7 ในชีท "สินค้า"
วิธีที่ 1: สร้างสูตร VLOOKUP ข้ามชีทด้วยการคลิก (แนะนำสำหรับมือใหม่)
- ไปที่ชีท "ใบสั่งซื้อ" คลิกเซลล์ B2 (ช่องชื่อสินค้า)
- พิมพ์
=VLOOKUP( - คลิกเซลล์ A2 (รหัสสินค้า) แล้วพิมพ์เครื่องหมายจุลภาค
, - คลิกแท็บชีท "สินค้า" ที่ด้านล่างของหน้าจอ แล้วลากเลือกช่วง A2:D7 จะเห็นสูตรเป็น
=VLOOKUP(A2,สินค้า!A2:D7 - กด F4 หนึ่งครั้ง เพื่อล็อกช่วงเป็น
สินค้า!$A$2:$D$7 - พิมพ์
,2,FALSE)แล้วกด Enter (ไม่ต้องคลิกกลับชีทเดิม Excel จะพากลับมาเอง)
ผลลัพธ์ที่ B2:
=VLOOKUP(A2, สินค้า!$A$2:$D$7, 2, FALSE)

ถ้า A2 คือ P003 จะได้ "แฟ้มสันกว้าง 3 นิ้ว" จากนั้นลากสูตรลงไปทั้งคอลัมน์ได้เลย
ช่องราคาต่อหน่วย (C2) ใช้สูตรเดียวกัน เปลี่ยนแค่เลขคอลัมน์เป็น 3
=VLOOKUP(A2, สินค้า!$A$2:$D$7, 3, FALSE)
และช่องจำนวนเงิน (E2) คือ =C2*D2
วิธีที่ 2: พิมพ์ชื่อชีทในสูตรเอง
ถ้าคุ้นเคยแล้ว พิมพ์สูตรเองได้เร็วกว่า แต่ต้องระวังเรื่องชื่อชีท
- ชื่อชีทธรรมดา เช่น สินค้า, Products พิมพ์ได้เลย:
สินค้า!$A$2:$D$7 - ชื่อชีทที่มีเว้นวรรค สัญลักษณ์ หรือขึ้นต้นด้วยตัวเลข เช่น "ราคา 2026" ต้องครอบชื่อด้วยเครื่องหมาย ' (Single quote):
'ราคา 2026'!$A$2:$D$7
เคล็ดลับ: ถ้าไม่แน่ใจ ใช้วิธีคลิกเลือกตามวิธีที่ 1 Excel จะใส่ชื่อชีทและเครื่องหมาย ' ให้ถูกต้องเอง และถ้าพิมพ์ชื่อชีทผิด Excel จะเปิดหน้าต่างให้เลือกไฟล์ (Update Values) ให้กด Cancel แล้วตรวจชื่อชีทใหม่
ทำไมต้องล็อกช่วงข้อมูลด้วย $
ถ้าไม่ล็อก เมื่อลากสูตรจาก B2 ลงไป B3, B4 ช่วงข้อมูลจะเลื่อนตามเป็น สินค้า!A3:D8, สินค้า!A4:D9 แถวบนของตารางสินค้าจะหลุดจากการค้นหา ทำให้บางแถวขึ้น #N/A ทั้งที่รหัสมีอยู่จริง ซึ่งเป็นสาเหตุที่พบบ่อยที่สุดของปัญหา VLOOKUP ข้ามชีท
ส่วน A2 (ค่าที่ค้นหา) ไม่ต้องล็อก เพราะต้องการให้เลื่อนตามแถวของใบสั่งซื้อ
3 วิธีทำให้ช่วงข้อมูลขยายเองเมื่อเพิ่มสินค้าใหม่
1. อ้างอิงทั้งคอลัมน์
=VLOOKUP(A2, สินค้า!$A:$D, 3, FALSE)
ง่ายที่สุด เพิ่มสินค้าแถวไหนก็หาเจอ แต่ต้องไม่มีข้อมูลอื่นปนอยู่ในคอลัมน์ A ถึง D ของชีทสินค้า
2. แปลงตารางสินค้าเป็น Table (แนะนำ)
ในชีท "สินค้า" คลิกในตารางแล้วกด Ctrl + T จากนั้นตั้งชื่อ Table ที่แท็บ Table Design ว่า tblProduct
=VLOOKUP(A2, tblProduct, 3, FALSE)

สูตรสั้นลง ไม่ต้องใส่ชื่อชีท ไม่ต้องล็อก $ และช่วงขยายเองทุกครั้งที่เพิ่มสินค้า แม้จะอยู่คนละชีทก็ใช้ชื่อ Table ได้เลย
3. ตั้งชื่อช่วงข้อมูล (Named Range)
เลือกช่วง A2:D7 ในชีทสินค้า พิมพ์ชื่อ เช่น ProductList ในช่อง Name Box (ช่องซ้ายของแถบสูตร) แล้วกด Enter
=VLOOKUP(A2, ProductList, 3, FALSE)
VLOOKUP ข้ามไฟล์ (คนละ Workbook)
ถ้าตารางสินค้าอยู่ในอีกไฟล์ เช่น "ราคาสินค้า.xlsx" ให้เปิดทั้งสองไฟล์ แล้วใช้วิธีคลิกเลือกแบบวิธีที่ 1 โดยสลับไปคลิกในไฟล์ราคาสินค้า Excel จะเขียนสูตรให้เป็น
=VLOOKUP(A2, '[ราคาสินค้า.xlsx]สินค้า'!$A$2:$D$100, 3, FALSE)
เมื่อปิดไฟล์ราคาสินค้า สูตรจะเปลี่ยนเป็นที่อยู่เต็มของไฟล์ (Path) และ Excel อาจถามให้ Update links เมื่อเปิดไฟล์ครั้งถัดไป ข้อควรระวัง
- ถ้าย้ายหรือเปลี่ยนชื่อไฟล์ต้นทาง ลิงก์จะขาด แก้ได้ที่ Data > Edit Links > Change Source
- ถ้าส่งไฟล์ให้คนอื่น เขาจะเปิดไฟล์ต้นทางไม่ได้ ควรรวมตารางไว้ในไฟล์เดียวกัน หรือใช้ Power Query ดึงข้อมูลแทน
VLOOKUP ค้นหาจากหลายชีท
ถ้าข้อมูลสินค้าแยกอยู่หลายชีท เช่น "สินค้า_ในประเทศ" และ "สินค้า_นำเข้า" ให้ค้นชีทแรกก่อน ถ้าไม่เจอค่อยค้นชีทถัดไปด้วย IFNA
=IFNA(VLOOKUP(A2, สินค้า_ในประเทศ!$A:$D, 3, FALSE),
IFNA(VLOOKUP(A2, สินค้า_นำเข้า!$A:$D, 3, FALSE), "ไม่พบรหัส"))
เลือกชีทที่จะค้นหาจากชื่อในเซลล์ (INDIRECT)
ถ้ามีชีทราคาแยกตามปี และต้องการเลือกปีจาก Dropdown ในเซลล์ G1 (เช่น "ราคา_2026")
=VLOOKUP(A2, INDIRECT("'" & $G$1 & "'!$A:$D"), 3, FALSE)
INDIRECT แปลงข้อความเป็นการอ้างอิงชีท ทำให้เปลี่ยนชีทได้โดยไม่แก้สูตร ข้อเสียคือ INDIRECT คำนวณใหม่ทุกครั้งที่มีการแก้ไขไฟล์ ถ้าใช้หลายพันเซลล์ไฟล์จะช้า และถ้าเปลี่ยนชื่อชีท สูตรจะไม่อัปเดตตามเอง
ดึงหลายคอลัมน์ข้ามชีทด้วยสูตรเดียวแล้วลาก
ถ้าหัวคอลัมน์ในชีทใบสั่งซื้อตรงกับหัวคอลัมน์ในชีทสินค้า ใช้ MATCH หาเลขคอลัมน์แทนการพิมพ์เลขเอง
=VLOOKUP($A2, สินค้า!$A$2:$D$100, MATCH(B$1, สินค้า!$A$1:$D$1, 0), FALSE)
เขียนที่ B2 แล้วลากไปทางขวาและลงล่างได้ทั้งตาราง และถ้ามีคนแทรกคอลัมน์ในชีทสินค้า สูตรก็ยังดึงคอลัมน์ที่ถูกต้อง
ปัญหาที่พบบ่อยเมื่อใช้ VLOOKUP ข้ามชีท
| อาการ | สาเหตุ | วิธีแก้ |
|---|---|---|
| #N/A บางแถว | ไม่ได้ล็อกช่วงด้วย $ | กด F4 ที่ช่วงข้อมูลในสูตร |
| #N/A ทุกแถว | ลืม FALSE, รหัสมีช่องว่างเกิน หรือเป็นตัวเลขกับข้อความไม่ตรงกัน | ดู8 สาเหตุที่ VLOOKUP ขึ้น #N/A |
| #REF! | ลบชีทต้นทาง หรือเลขคอลัมน์เกินจำนวนคอลัมน์ในช่วง | ตรวจว่าชีทยังอยู่ และเลขคอลัมน์ไม่เกินช่วงที่เลือก |
| หน้าต่าง Update Values ขึ้นมา | พิมพ์ชื่อชีทผิด หรือชีทมีเว้นวรรคแต่ไม่ใส่ ' ' | กด Cancel แล้วใช้วิธีคลิกเลือกชีทแทน |
| ได้ชื่อสินค้าผิดตัว | ใส่ TRUE หรือเว้นว่างอาร์กิวเมนต์สุดท้าย | เปลี่ยนเป็น FALSE |
ข่าวดีคือ ถ้าเปลี่ยนชื่อชีทด้วยการดับเบิลคลิกที่แท็บชีท Excel จะแก้ชื่อชีทในทุกสูตรให้อัตโนมัติ (ยกเว้นสูตรที่ใช้ INDIRECT)
แสดงข้อความแทน #N/A เมื่อยังไม่กรอกรหัส
ในใบสั่งซื้อที่ยังมีแถวว่าง ช่องชื่อสินค้าจะขึ้น #N/A ดูไม่เรียบร้อย แก้ด้วย
=IF(A2="", "", IFNA(VLOOKUP(A2, สินค้า!$A$2:$D$100, 2, FALSE), "ไม่พบรหัสสินค้า"))

ถ้ายังไม่กรอกรหัสจะเว้นว่าง ถ้ากรอกรหัสผิดจะแสดงข้อความเตือน
คำถามที่พบบ่อย
VLOOKUP ข้ามชีทกับในชีทเดียวกัน ต่างกันอย่างไร
หลักการเหมือนกันทุกอย่าง ต่างกันแค่ต้องมีชื่อชีทและเครื่องหมาย ! นำหน้าช่วงข้อมูล
ใช้ XLOOKUP ข้ามชีทได้ไหม
ได้ ใช้หลักเดียวกัน เช่น =XLOOKUP(A2, สินค้า!A2:A100, สินค้า!C2:C100, "ไม่พบ") และยังค้นหาไปทางซ้ายได้ อ่านเพิ่มที่สอนใช้ XLOOKUP แทน VLOOKUP (ใช้ได้ใน Microsoft 365 และ Excel 2021 ขึ้นไป)
VLOOKUP ข้ามชีทใน Google Sheets ทำได้ไหม
ได้ เขียนเหมือนกัน เช่น =VLOOKUP(A2, 'สินค้า'!A:D, 3, FALSE) ส่วนการดึงข้ามไฟล์ใน Google Sheets ต้องใช้ IMPORTRANGE
สรุป
สูตร VLOOKUP ข้ามชีทใน Excel ใช้หลักเดียวกับ VLOOKUP ปกติ เพียงใส่ ชื่อชีท! นำหน้าช่วงข้อมูล จำ 3 ข้อให้แม่น คือ คลิกเลือกชีทแทนการพิมพ์ ล็อกช่วงด้วย F4 และใส่ FALSE ท้ายสูตร แล้วต่อยอดด้วย Table เพื่อให้ช่วงข้อมูลขยายเอง
ดูตัวอย่างการใช้ VLOOKUP กับงานขายเพิ่มเติมได้ที่สูตร VLOOKUP สำหรับงานขายสินค้า ถ้าอยากฝึกสูตรค้นหาอย่าง VLOOKUP, XLOOKUP และ INDEX + MATCH กับข้อมูลตัวอย่างจริงพร้อมวิทยากรดูแล ดูหลักสูตรอบรม Excel Advance และสำหรับองค์กรที่ต้องการจัดอบรม Excel ให้ทีม ดูรายละเอียดอบรม In-house / Online
- #VLOOKUP
- #VLOOKUP ข้ามชีท
- #สูตร Excel
- #Excel Advance