
สำหรับ Index นั้นมีส่วนประกอบ 2 แบบตามด้านล่างครับ
- รูปแบบอาร์เรย์
INDEX(array, row_num, [column_num])
- รูปแบบการอางอิง
INDEX(reference, row_num, [column_num], [area_num])
ที่เราใช้กันทั่ว ๆ หรือที่ใช้ตามกระทู้นี้ไปคือแบบแรก สำหรับ array ในที่นี้จะเป็นตารางข้อมูลคือมีทั้งบรรทัดและคอลัมน์
จากสูตร
=INDEX(data!$C$4:$AJ$11,MATCH($B6,data!$B$4:$B$11,0),MATCH(1,IF(data!$C$2:$AJ$2=$C$3,IF(data!$C$3:$AJ$3=C$5,1)),0))
หมายถึง จากช่วงข้อมูล data!$C$4:$AJ$11 ให้นำบรรทัดที่เป็นผลลัพธ์ของสูตร MATCH($B6,data!$B$4:$B$11,0) และคอลัมน์ที่เป็นบรรทัดของสูตร MATCH(1,IF(data!$C$2:$AJ$2=$C$3,IF(data!$C$3:$AJ$3=C$5,1)),0) มาแสดง
หาก MATCH($B6,data!$B$4:$B$11,0) ได้ผลลัพธ์เป็น
2 และ
MATCH(1,IF(data!$C$2:$AJ$2=$C$3,IF(data!$C$3:$AJ$3=C$5,1)),0) ได้ผลลัพธ์เป็น
3 สูตรจะได้เป็น
=INDEX(data!$C$4:$AJ$11,
2,
3) นั่นหมายความว่า จากช่วงข้อมูล data!$C$4:$AJ$11 ให้นำบรรทัดที่ 2 และคอลัมน์ที่ 3 มาแสดง หรือนั่นคือค่าในเซลล์ E5 นั่นเอง
สำหรับ MATCH(1,IF(data!$C$2:$AJ$2=$C$3,IF(data!$C$3:$AJ$3=C$5,1)),0) หมายถึง ให้หาว่า 1 อยู่ในลำดับที่เท่าไรของ IF(data!$C$2:$AJ$2=$C$3,IF(data!$C$3:$AJ$3=C$5,1))
ซึ่ง IF(data!$C$2:$AJ$2=$C$3,IF(data!$C$3:$AJ$3=C$5,1)) หมายถึง ถ้า data!$C$2:$AJ$2=$C$3 เป็นจริง และ IF(data!$C$3:$AJ$3=C$5 เป็นจริงแล้ว ให้แสดงเลข 1 ถ้าไม่เป็นจริงให้แสดงค่า False สูตรก็จะได้เป็น
เช่น
=Match(1,{false,false,1,1,1,...,false},0)
จากตัวอย่าง ผลลัพธ์จะได้ 3 นันคือ เลข 1 อยู่ในลำดับที่ 3 ของ {false,false,
1,1,1,...,false} ซึ่งจะใช้เป็นส่วนประกอบของฟังก์ชั่น Index ต่อไป
การจะเข้าใจสูตรพวกนี้ได้จำเป็นอย่างยิ่งที่จะต้องทำความเข้าใจสูตร Index และ Match แบบธรรมดาเสียก่อนเพื่อจะเป็นพื้นฐานให้เข้าใจสูตรแบบ Array ได้ในลำดับต่อไป โดยศึกษาได้ที่นี่ครับ
Index
Help on this function
Match
Help on this function
จากการที่เห็นคำถามมาหลาย ๆ กระทู้พบว่า คุณ natthaporn มักจะนำรายงานมาทำรายงาน จึงจำเป็นต้องใช้สูตรที่ค่อนข้างยากในการสรุปรวมข้อมูล หรือไม่ก็พยายามใช้ VBA เข้ามาช่วยในการจัดการ ซึ่งในบางครั้งก็เป็นเรื่องที่เกินความจำเป็น หากว่าต้องการให้ง่ายกับการทำงานลักษณะนี้แล้ว ควรนำ Database มาทำรายงานซึ่งผมเคยบอกไปแล้ว เมื่อเป็น Database แล้วจะสรุปข้อมูลได้ง่ายขึ้นมากครับ