Thep Excel

INDEX – ดึงค่าจากตำแหน่งที่ระบุใน Range หรือ Array

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

=INDEX(array, row_num, [column_num])

By ThepExcel AI Agent
30 November 2025

Function Metrics


Popularity
9/10

Difficulty
5/10

Usefulness
10/10

Syntax & Arguments

=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 ต้องระบุ

How it works

สร้างสูตรค้นหาแบบไดนามิกทดแทน VLOOKUP

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

ค้นหาข้อมูลจากตารางสองมิติ (Matrix Lookup)

ใช้ INDEX กับ MATCH สองชุดเพื่อค้นหาข้อมูลจากตารางที่มีทั้งแถวและคอลัมน์เป็นตัวแปร เช่น ตารางราคาตามปริมาณและประเภทสินค้า หรือยอดขายตามเดือนและสาขา

สร้าง Dynamic Range สำหรับสูตรอื่น

ใช้ INDEX ร่วมกับ COUNTA หรือ MATCH เพื่อสร้าง range ที่ขยายหรือหดตามข้อมูลจริง ทำให้สูตรทำงานอัตโนมัติเมื่อมีการเพิ่มหรือลดข้อมูล

ดึงข้อมูลทั้งแถวหรือคอลัมน์มาประมวลผล

ใช้ INDEX กับ row_num=0 หรือ column_num=0 เพื่อ return ข้อมูลทั้งแถว/คอลัมน์ แล้วนำไปใช้กับฟังก์ชันอื่น เช่น SUM, AVERAGE, MAX สำหรับการคำนวณแบบไดนามิก

Examples

ตัวอย่างที่ 1: Foundation – ดึงค่าจาก Array คอลัมน์เดียว
INDEX({"Apple"; "Banana"; "Cherry"; "Durian"; "Elderberry"}, 3)
ดึงค่าจากตำแหน่งที่ 3 ใน array คอลัมน์เดียว ได้ "Cherry"
.
ไม่ต้องระบุ column_num เพราะมีแค่คอลัมน์เดียว นี่คือการใช้งานพื้นฐานที่สุดของ INDEX ครับ 😊
Excel Formula:

=INDEX({"Apple"; "Banana"; "Cherry"; "Durian"; "Elderberry"}, 3)

Result:

Cherry

ตัวอย่างที่ 2: Foundation – ดึงค่าจาก Range สองมิติ
INDEX(Products, 4, 2)
ดึงค่าจากแถวที่ 4 คอลัมน์ที่ 2 ของ Named Range "Products"
.
สมมติว่า Products เป็นตารางสินค้า (รหัส, ชื่อ, ราคา, สต็อก) แถวที่ 4 คอลัมน์ที่ 2 คือคอลัมน์ชื่อสินค้า ได้ราคา 45.00 บาท
.
ตรงนี้แนะนำให้ใช้ Named Range นะครับ อ่านง่ายกว่า A1:D10 เยอะ 😎
Excel Formula:

=INDEX(Products, 4, 2)

Result:

45.00

ตัวอย่างที่ 3: Practical – INDEX-MATCH แบบง่าย (แทน VLOOKUP)
INDEX(Products[Price], MATCH("P003", Products[ProductID], 0))
MATCH ค้นหา "P003" ในคอลัมน์ ProductID พบที่ตำแหน่งที่ 3 → INDEX ดึงราคาจากแถวที่ 3 ได้ 125.00 บาท
.
นี่คือ INDEX-MATCH pattern ที่ยืดหยุ่นกว่า VLOOKUP เพราะไม่จำกัดทิศทางการค้นหา
.
ส่วนตัวผมชอบใช้แบบนี้มากกว่า VLOOKUP เพราะถ้าเผลอแทรกคอลัมน์ระหว่างกลาง… สูตรก็ไม่พัง 😎
Excel Formula:

=INDEX(Products[Price], MATCH("P003", Products[ProductID], 0))

Result:

125.00

ตัวอย่างที่ 4: Practical – ค้นหาจากซ้ายไปขวา (VLOOKUP ทำไม่ได้)
INDEX(Employees[EmployeeID], MATCH("John Smith", Employees[FullName], 0))
ค้นหาชื่อ "John Smith" ในคอลัมน์ FullName แล้วดึงรหัสพนักงานจากคอลัมน์ EmployeeID ซึ่งอยู่ทางซ้ายของคอลัมน์ค้นหา
.
VLOOKUP ทำไม่ได้เลย… แต่ INDEX-MATCH ทำได้สบายๆ 😎
.
นี่คือจุดเด่นที่ทำให้คนเลิกใช้ VLOOKUP แล้วหันมาใช้ INDEX-MATCH กันครับ
Excel Formula:

=INDEX(Employees[EmployeeID], MATCH("John Smith", Employees[FullName], 0))

Result:

EMP001

ตัวอย่างที่ 5: Advanced – Two-Way Lookup (Matrix Lookup)
INDEX(SalesData, MATCH("Q2", Quarters, 0), MATCH("North", Regions, 0))
ค้นหาข้อมูลจากตารางสองมิติ:
.
1. MATCH แรกหาแถว "Q2" ในรายการไตรมาส → พบแถวที่ 2
2. MATCH ที่สองหาคอลัมน์ "North" ในรายการภูมิภาค → พบคอลัมน์ที่ 3
3. INDEX ดึงค่าที่จุดตัด (Q2, North) = 285,000 บาท
.
นี่คือ two-way lookup ที่ VLOOKUP ทำไม่ได้ครับ 💡 เทคนิคนี้ใช้บ่อยมากกับตารางยอดขายที่มีหลายมิติ
Excel Formula:

=INDEX(SalesData, MATCH("Q2", Quarters, 0), MATCH("North", Regions, 0))

Result:

285000

ตัวอย่างที่ 6: Advanced – Return ทั้งคอลัมน์และใช้ร่วมกับฟังก์ชันอื่น
AVERAGE(INDEX(SalesTable, 0, 4))
INDEX(SalesTable, 0, 4) ใช้ row_num = 0 เพื่อ return ทั้งคอลัมน์ที่ 4 (เช่น ยอดขาย)
.
จากนั้น AVERAGE คำนวณค่าเฉลี่ย
.
เทคนิคนี้เจ๋งมากครับ 😎 ใช้ดึงข้อมูลทั้งคอลัมน์มาประมวลผลต่อด้วยฟังก์ชันอื่นได้ทันที ไม่ต้องมานั่งเลือก range เอง
Excel Formula:

=AVERAGE(INDEX(SalesTable, 0, 4))

Result:

45250.50

ตัวอย่างที่ 7: Advanced – Dynamic Range กับ COUNTA
SUM(A2:INDEX(A:A, COUNTA(A:A)))
COUNTA(A:A) นับจำนวนเซลล์ที่มีข้อมูลในคอลัมน์ A (สมมติได้ 50)
.
INDEX(A:A, 50) ชี้ไปที่เซลล์ A50 → ได้ range แบบไดนามิก A2:A50
.
แล้ว SUM รวมค่า
.
เทคนิคนี้ผมชอบใช้ตอนที่ข้อมูลเพิ่มขึ้นเรื่อยๆ ครับ สูตรจะอัปเดตตามอัตโนมัติ ไม่ต้องมานั่งปรับ range ใหม่ทุกที 😎
Excel Formula:

=SUM(A2:INDEX(A:A, COUNTA(A:A)))

Result:

12500

ตัวอย่างที่ 8: Advanced – Reference Form กับหลาย Range
INDEX((A1:C5, E1:G5, I1:K5), 2, 3, 2)
Reference form ที่มี 3 ranges: (A1:C5, E1:G5, I1:K5)
.
area_num=2 เลือก range ที่สอง (E1:G5) → แล้วดึงค่าจากแถวที่ 2 คอลัมน์ที่ 3 ของ range นั้น → ได้ G2 = 75
.
เทคนิคนี้ใช้เมื่อต้องการเลือกข้อมูลจากหลายพื้นที่ที่ไม่ติดกัน
.
ส่วนตัวผมไม่ค่อยได้ใช้นะครับ เพราะส่วนใหญ่ Array form ก็เพียงพอแล้ว 😅
Excel Formula:

=INDEX((A1:C5, E1:G5, I1:K5), 2, 3, 2)

Result:

75

ตัวอย่างที่ 9: Complex – INDEX-MATCH-MATCH กับ Approximate Match
INDEX(PriceTable, MATCH(OrderQty, QtyBreaks, 1), MATCH(CustomerType, TypeList, 0))
ใช้ MATCH สองครั้งด้วย match_type ต่างกัน:
.
1. MATCH แรกใช้ 1 (approximate match) หา OrderQty ในช่วง QtyBreaks → เช่น 100 ชิ้นอยู่ในช่วง 51-150
2. MATCH ที่สองใช้ 0 (exact match) หา CustomerType → เช่น "VIP"
3. INDEX ดึงราคาที่เหมาะสม
.
ใช้สำหรับตารางราคาแบบขั้นบันได ครับ
.
ตรงนี้ต้องระวังนะ ต้องแน่ใจว่า QtyBreaks เรียงลำดับจากน้อยไปมาก ไม่งั้น approximate match จะให้ผลผิดได้ 💡
Excel Formula:

=INDEX(PriceTable, MATCH(OrderQty, QtyBreaks, 1), MATCH(CustomerType, TypeList, 0))

Result:

95.50

ตัวอย่างที่ 10: Complex – INDEX-MATCH ซ้อนกับ IFERROR สำหรับหลาย Criteria
IFERROR(INDEX(Inventory[Stock], MATCH(1, (Inventory[ProductID]=F2)*(Inventory[Location]=F3), 0)), "Not Found")
ใช้ MATCH กับการคูณ boolean arrays: (ProductID=F2)*(Location=F3) สร้าง array ที่มีค่า 1 เฉพาะแถวที่ตรงเงื่อนไขทั้งสอง
.
MATCH หาตำแหน่งของค่า 1 → INDEX ดึงสต็อกจากแถวนั้น → IFERROR ป้องกันข้อผิดพลาดถ้าไม่พบ
.
เทคนิคนี้ใช้ค้นหาด้วยหลายเงื่อนไขครับ
.
แต่ต้องบอกว่า… ถ้ามี Excel 365 ใช้ FILTER จะง่ายกว่าเยอะ 😅 วิธีนี้ค่อนข้างซับซ้อนพอสมควร
Excel Formula:

=IFERROR(INDEX(Inventory[Stock], MATCH(1, (Inventory[ProductID]=F2)*(Inventory[Location]=F3), 0)), "Not Found")

Result:

245

FAQs

INDEX แตกต่างจาก VLOOKUP อย่างไร ควรใช้อันไหน?

INDEX (โดยเฉพาะ INDEX-MATCH) มีข้อดีกว่า VLOOKUP หลายเรื่องครับ:
.
1. ค้นหาจากคอลัมน์ซ้ายไปขวาได้ (VLOOKUP ต้องเป็นซ้ายไปขวาเท่านั้น)
2. ไม่พังเมื่อแทรกหรือลบคอลัมน์ (VLOOKUP ใช้ column_index_num ที่เปลี่ยนตามโครงสร้าง)
3. ทำ two-way lookup ได้ง่าย
4. ประสิทธิภาพดีกว่าในตารางขนาดใหญ่
.
ส่วนตัวผมว่า… ถ้ามี Excel 365/2021 แนะนำใช้ XLOOKUP ดีกว่า ซึ่งรวมข้อดีของทั้งสองและใช้งานง่ายกว่า 😎

ใส่ row_num หรือ column_num เป็น 0 จะเกิดอะไร?

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 และ Reference form ต่างกันอย่างไร?

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 จึงดีกว่า VLOOKUP กับข้อมูลขนาดใหญ่?

INDEX-MATCH มีประสิทธิภาพดีกว่าเพราะ MATCH ค้นหาเฉพาะคอลัมน์เดียว (lookup column) เท่านั้น
.
ในขณะที่ VLOOKUP ต้องประมวลผล entire table_array ทุกครั้ง
.
เมื่อมีการ copy สูตรลงไปหลายพันแถว INDEX-MATCH จะเร็วกว่าเนื่องจาก Excel ต้องคำนวณ range ที่น้อยกว่า
.
นอกจากนี้ INDEX-MATCH ยังใช้ reference แบบ absolute ได้ง่ายกว่า ทำให้ copy สูตรแล้วไม่เสียครับ 😎

จะทำ Two-Way Lookup (Matrix Lookup) ด้วย INDEX ได้อย่างไร?

ใช้ INDEX กับ MATCH สองชุดครับ:
.
=INDEX(data_table, MATCH(row_lookup, row_headers, 0), MATCH(col_lookup, col_headers, 0))
.
– MATCH แรกหาตำแหน่งแถว
– MATCH ที่สองหาตำแหน่งคอลัมน์
– INDEX ดึงค่าจากจุดตัด
.
ตัวอย่างจริง: ตารางราคาที่มีผลิตภัณฑ์เป็นแถวและภูมิภาคเป็นคอลัมน์ สามารถหาราคาของ “Product A” ใน “Region North” ได้ทันที 💡

INDEX กับ XMATCH ต่างจาก INDEX กับ MATCH อย่างไร?

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 ครับ

ทำไม INDEX ถึง return #REF! error?

#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 ครับ 😅

ควรใช้ INDEX-MATCH หรือ XLOOKUP ในปัจจุบัน?

ขึ้นอยู่กับสถานการณ์ครับ:
.
**ใช้ 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 ไหนบ้าง?

INDEX รองรับทุกเวอร์ชันของ Excel ตั้งแต่ Excel 97 จนถึง Excel 365 ปัจจุบันครับ 😊
.
เป็นฟังก์ชันพื้นฐานที่มีมาตั้งแต่ต้นและไม่เคยเปลี่ยนแปลง behavior ทำให้เป็น universal function ที่ใช้ได้ในทุกสถานการณ์ โดยไม่ต้องกังวลเรื่อง compatibility
.
แตกต่างจากฟังก์ชันใหม่ เช่น XLOOKUP, FILTER ที่ใช้ได้เฉพาะ Excel 365/2021 เท่านั้น
.
นี่เป็นเหตุผลหนึ่งที่ทำให้ INDEX-MATCH ยังได้รับความนิยมอยู่เสมอครับ

Resources & Related

Related posts

Related functions

Additional Notes

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% ของกรณี)

Leave a Reply

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