INDEX คืนค่าหรือ reference ของเซลล์จากตำแหน่งที่ระบุใน range หรือ array โดยอ้างอิงจากหมายเลขแถวและคอลัมน์ที่เราระบุ มักถูกใช้ร่วมกับ MATCH เพื่อสร้าง INDEX-MATCH pattern ที่ยืดหยุ่นกว่า VLOOKUP เยอะ เพราะสามารถดึงข้อมูลจากทิศทางไหนก็ได้ และไม่พังเมื่อมีการแทรกหรือลบคอลัมน์
=INDEX(array, row_num, [column_num])
=INDEX(array, row_num, [column_num])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| array | Range/Array | Yes | ช่วงข้อมูล (range) หรือ array constant ที่ต้องการดึงค่า สำหรับ array form | |
| reference | Reference | Yes | การอ้างอิงถึงหนึ่งหรือหลาย range สำหรับ reference form ถ้าเป็นหลาย range ต้องใส่วงเล็บครอบ เช่น (A1:C5, E1:G5) | |
| row_num | Number | Yes | หมายเลขแถวใน array หรือ reference ที่ต้องการดึงค่า (นับจาก 1) ใส่ 0 เพื่อ return ทั้งคอลัมน์ | |
| column_num | Number | Optional | 1 | หมายเลขคอลัมน์ใน array หรือ reference ที่ต้องการดึงค่า (นับจาก 1) ใส่ 0 เพื่อ return ทั้งแถว ถ้า array เป็นคอลัมน์เดียวไม่ต้องระบุ |
| area_num | Number | Optional | 1 | สำหรับ reference form ระบุว่าจะใช้ range ไหนถ้ามีหลาย range (1 = range แรก, 2 = range ที่สอง) ถ้ามีหลาย range ต้องระบุ |
ใช้ INDEX-MATCH เพื่อสร้างสูตรค้นหาที่ยืดหยุ่นกว่า VLOOKUP โดยสามารถค้นหาจากคอลัมน์ซ้ายไปขวาได้ ไม่พังเมื่อมีการแทรกหรือลบคอลัมน์ และไม่ต้องจำ column_index_num ที่อาจเปลี่ยนแปลงได้
ใช้ INDEX กับ MATCH สองชุดเพื่อค้นหาข้อมูลจากตารางที่มีทั้งแถวและคอลัมน์เป็นตัวแปร เช่น ตารางราคาตามปริมาณและประเภทสินค้า หรือยอดขายตามเดือนและสาขา
ใช้ INDEX ร่วมกับ COUNTA หรือ MATCH เพื่อสร้าง range ที่ขยายหรือหดตามข้อมูลจริง ทำให้สูตรทำงานอัตโนมัติเมื่อมีการเพิ่มหรือลดข้อมูล
ใช้ INDEX กับ row_num=0 หรือ column_num=0 เพื่อ return ข้อมูลทั้งแถว/คอลัมน์ แล้วนำไปใช้กับฟังก์ชันอื่น เช่น SUM, AVERAGE, MAX สำหรับการคำนวณแบบไดนามิก
INDEX({"Apple"; "Banana"; "Cherry"; "Durian"; "Elderberry"}, 3)=INDEX({"Apple"; "Banana"; "Cherry"; "Durian"; "Elderberry"}, 3)
Cherry
INDEX(Products, 4, 2)=INDEX(Products, 4, 2)
45.00
INDEX(Products[Price], MATCH("P003", Products[ProductID], 0))=INDEX(Products[Price], MATCH("P003", Products[ProductID], 0))
125.00
INDEX(Employees[EmployeeID], MATCH("John Smith", Employees[FullName], 0))=INDEX(Employees[EmployeeID], MATCH("John Smith", Employees[FullName], 0))
EMP001
INDEX(SalesData, MATCH("Q2", Quarters, 0), MATCH("North", Regions, 0))=INDEX(SalesData, MATCH("Q2", Quarters, 0), MATCH("North", Regions, 0))
285000
AVERAGE(INDEX(SalesTable, 0, 4))=AVERAGE(INDEX(SalesTable, 0, 4))
45250.50
SUM(A2:INDEX(A:A, COUNTA(A:A)))=SUM(A2:INDEX(A:A, COUNTA(A:A)))
12500
INDEX((A1:C5, E1:G5, I1:K5), 2, 3, 2)=INDEX((A1:C5, E1:G5, I1:K5), 2, 3, 2)
75
INDEX(PriceTable, MATCH(OrderQty, QtyBreaks, 1), MATCH(CustomerType, TypeList, 0))=INDEX(PriceTable, MATCH(OrderQty, QtyBreaks, 1), MATCH(CustomerType, TypeList, 0))
95.50
IFERROR(INDEX(Inventory[Stock], MATCH(1, (Inventory[ProductID]=F2)*(Inventory[Location]=F3), 0)), "Not Found")=IFERROR(INDEX(Inventory[Stock], MATCH(1, (Inventory[ProductID]=F2)*(Inventory[Location]=F3), 0)), "Not Found")
245
INDEX (โดยเฉพาะ INDEX-MATCH) มีข้อดีกว่า VLOOKUP หลายเรื่องครับ:
.
1. ค้นหาจากคอลัมน์ซ้ายไปขวาได้ (VLOOKUP ต้องเป็นซ้ายไปขวาเท่านั้น)
2. ไม่พังเมื่อแทรกหรือลบคอลัมน์ (VLOOKUP ใช้ column_index_num ที่เปลี่ยนตามโครงสร้าง)
3. ทำ two-way lookup ได้ง่าย
4. ประสิทธิภาพดีกว่าในตารางขนาดใหญ่
.
ส่วนตัวผมว่า… ถ้ามี Excel 365/2021 แนะนำใช้ XLOOKUP ดีกว่า ซึ่งรวมข้อดีของทั้งสองและใช้งานง่ายกว่า 😎
INDEX จะ return reference ทั้งแถวหรือทั้งคอลัมน์ครับ 😊
.
ตัวอย่าง: INDEX(A1:E10, 0, 3) จะ return ทั้งคอลัมน์ C (คอลัมน์ที่ 3) จาก range นั้น
.
ซึ่งสามารถนำไปใช้กับฟังก์ชันอื่นได้:
– =SUM(INDEX(Data, 0, 3)) รวมค่าทั้งคอลัมน์ที่ 3
– =AVERAGE(INDEX(Data, 5, 0)) หาค่าเฉลี่ยทั้งแถวที่ 5
.
เป็นเทคนิคที่ทรงพลังมากสำหรับสูตรแบบไดนามิก 💡
Array form มี syntax: INDEX(array, row_num, [column_num]) → ใช้กับ range เดียว เหมาะสำหรับการใช้งานทั่วไป (95% ของกรณี)
.
Reference form มี syntax: INDEX(reference, row_num, [column_num], [area_num]) → รองรับหลาย range ที่ไม่ติดกัน เช่น (A1:C5, E1:G5) แล้วใช้ area_num เลือก range
.
ความแตกต่างหลัก:
– Array form: ใช้ range ติดกัน
– Reference form: ใช้หลาย range แยกกัน
.
ส่วนตัวผมว่า… ส่วนใหญ่ใช้ Array form ก็เพียงพอแล้วครับ 😊
INDEX-MATCH มีประสิทธิภาพดีกว่าเพราะ MATCH ค้นหาเฉพาะคอลัมน์เดียว (lookup column) เท่านั้น
.
ในขณะที่ VLOOKUP ต้องประมวลผล entire table_array ทุกครั้ง
.
เมื่อมีการ copy สูตรลงไปหลายพันแถว INDEX-MATCH จะเร็วกว่าเนื่องจาก Excel ต้องคำนวณ range ที่น้อยกว่า
.
นอกจากนี้ INDEX-MATCH ยังใช้ reference แบบ absolute ได้ง่ายกว่า ทำให้ copy สูตรแล้วไม่เสียครับ 😎
ใช้ INDEX กับ MATCH สองชุดครับ:
.
=INDEX(data_table, MATCH(row_lookup, row_headers, 0), MATCH(col_lookup, col_headers, 0))
.
– MATCH แรกหาตำแหน่งแถว
– MATCH ที่สองหาตำแหน่งคอลัมน์
– INDEX ดึงค่าจากจุดตัด
.
ตัวอย่างจริง: ตารางราคาที่มีผลิตภัณฑ์เป็นแถวและภูมิภาคเป็นคอลัมน์ สามารถหาราคาของ “Product A” ใน “Region North” ได้ทันที 💡
XMATCH เป็นฟังก์ชันใหม่ใน Excel 365 ที่พัฒนาจาก MATCH มีข้อดีคือ:
.
1. ค้นหาจากล่างขึ้นบนได้ (search_mode=-1)
2. รองรับ wildcard และ binary search mode
3. มี if_not_found ในตัว ไม่ต้องใช้ IFERROR
4. Syntax ชัดเจนกว่า
.
สำหรับ INDEX-XMATCH vs INDEX-MATCH:
– ถ้าใช้ Excel 365 → แนะนำ XMATCH เพราะมีความสามารถมากกว่า 😎
– ถ้าต้องการ compatibility กับเวอร์ชันเก่า → ใช้ MATCH ครับ
#REF! error เกิดเมื่อ row_num หรือ column_num อยู่นอก range ที่กำหนดครับ
.
ตัวอย่าง: =INDEX(A1:C10, 15, 2) → error เพราะมีแค่ 10 แถวแต่ขอแถวที่ 15
.
วิธีแก้:
1. ตรวจสอบว่า row_num และ column_num ไม่เกินขนาด range
2. ใช้ IFERROR ครอบเพื่อจัดการ error → =IFERROR(INDEX(…), “ไม่พบข้อมูล”)
3. ถ้าใช้กับ MATCH ให้ตรวจสอบว่า MATCH พบค่าหรือไม่ (MATCH return #N/A ถ้าไม่พบ)
.
ตรงนี้เจอบ่อยมากเวลาใช้กับ MATCH ครับ 😅
ขึ้นอยู่กับสถานการณ์ครับ:
.
**ใช้ XLOOKUP ถ้า:**
1. ใช้ Excel 365 หรือ 2021
2. ต้องการ syntax ที่เรียบง่าย
3. ต้องการ if_not_found และ search_mode ในตัว
.
**ใช้ INDEX-MATCH ถ้า:**
1. ต้อง compatibility กับเวอร์ชันเก่า (Excel 2019 ลงมา)
2. ต้องการ return ทั้งแถว/คอลัมน์ด้วย row_num=0
3. ต้องการควบคุมละเอียดกว่า (เช่น ใช้ MATCH แบบ approximate)
.
**สรุป:** XLOOKUP ง่ายกว่าสำหรับ simple lookup แต่ INDEX-MATCH ยืดหยุ่นกว่าสำหรับ advanced scenarios 😎
INDEX รองรับทุกเวอร์ชันของ Excel ตั้งแต่ Excel 97 จนถึง Excel 365 ปัจจุบันครับ 😊
.
เป็นฟังก์ชันพื้นฐานที่มีมาตั้งแต่ต้นและไม่เคยเปลี่ยนแปลง behavior ทำให้เป็น universal function ที่ใช้ได้ในทุกสถานการณ์ โดยไม่ต้องกังวลเรื่อง compatibility
.
แตกต่างจากฟังก์ชันใหม่ เช่น XLOOKUP, FILTER ที่ใช้ได้เฉพาะ Excel 365/2021 เท่านั้น
.
นี่เป็นเหตุผลหนึ่งที่ทำให้ INDEX-MATCH ยังได้รับความนิยมอยู่เสมอครับ
INDEX ดึงค่าหรือ reference จากตำแหน่งที่ระบุใน range หรือ array โดยใช้หมายเลขแถว (row_num) และคอลัมน์ (column_num)
.
ส่วนตัวผมว่านี่คือหนึ่งในฟังก์ชันที่ “ต้องรู้” จริงๆ ถ้าจะใช้งาน Excel ให้เก่ง 😎 เพราะมันเป็นพื้นฐานของการค้นหาข้อมูลแบบไดนามิก
.
ฟังก์ชันนี้มักถูกใช้ร่วมกับ MATCH เป็น INDEX-MATCH pattern ซึ่งเหนือกว่า VLOOKUP หลายเรื่อง:
.
1. ค้นหาจากคอลัมน์ซ้ายไปขวาได้ (VLOOKUP ทำไม่ได้)
2. ไม่พังเมื่อมีการแทรกหรือลบคอลัมน์
3. ทำ two-way lookup (ค้นหาทั้งแถวและคอลัมน์พร้อมกัน) ได้ง่ายกว่าเยอะ
.
INDEX มี 2 รูปแบบคือ Array form และ Reference form โดย Array form เป็นที่นิยมใช้งานมากกว่า (ประมาณ 95% ของกรณี)