joo wrote:อาจารย์ครับ...ช่วยอธิบาย 3 สูตรนี้ให้หน่อยครับมันทำงานยังไงครับจะได้นำไปประยุกต์ใช้ต่อได้ถูก
1. =LOOKUP(9.99999999999999E+307,B$7:B7)
หมายถึงหาตัวเลขสุดท้ายในช่วงข้อมูล B$7:B7 ซึ่งจะเห็นว่า B7 ตัวหลังไม่ได้มีการ Lock หมายเลขบรรทัด หาก Copy ไปด้านล่างตัวเลขจะ Run ไปเรื่อย ๆ นั่นหมายถึงเพิ่มช่วงข้อมูลไปเรื่อย ๆ และเรากำลังหาตัวเลขสุดท้ายจากช่วงข้อมูลนั้นครับ
2. =IF(C6="","",LOOKUP(2,1/(($B6=Report!$I$7:$I$36)*($C6=Report!$C$7:$C$36)),Report!$F$7:$F$36))
หมายถึงหาค่าที่น้อยกว่าหรือเท่ากับ 2 จากช่วง 1/(($B6=Report!$I$7:$I$36)*($C6=Report!$C$7:$C$36)) แล้วนำค่าที่ตรงกันในช่วง Report!$F$7:$F$36 มาแสดง
จาก (($B6=Report!$I$7:$I$36)*($C6=Report!$C$7:$C$36)) จะให้ผลลัพธ์เพียง 2 ค่าครับ คือ True หรือ False และเมื่อใช้หนึ่งเป็นตัวตั้งเป็น
1/(($B6=Report!$I$7:$I$36)*($C6=Report!$C$7:$C$36)) ผลลัพธ์จะได้ 1 หรือ #Div/0!
ดังนั้นการหาค่าที่น้อยกว่าหรือเท่ากับ 2 จากช่วง 1/(($B6=Report!$I$7:$I$36)*($C6=Report!$C$7:$C$36)) จึงเท่ากับว่าเป็นการหาค่าเลข 1 ที่ปรากฎเป็นตัวสุดท้ายอยู่ที่ใด ให้นำค่าที่ตรงกันใน Report!$F$7:$F$36 มาแสดง
3.=INDEX(Report1!$D$6:$D$30,MATCH(1,IF(Report1!$C$6:$C$30=C23,IF(Report1!$B$6:$B$30=B23,1)),0))
สูตรนี้เป็นสูตร Array ความหมายคือจากช่วง Report1!$D$6:$D$30 ให้นำตำแหน่งที่ได้จากผลลัพธ์ของ MATCH(1,IF(Report1!$C$6:$C$30=C23,IF(Report1!$B$6:$B$30=B23,1)),0) มาแสดง
จาก MATCH(1,IF(Report1!$C$6:$C$30=C23,IF(Report1!$B$6:$B$30=B23,1)),0) หมายถึง ให้หาเลข 1 โดยที่กำหนดไว้ว่าถ้า Report1!$C$6:$C$30=C23 และ Report1!$B$6:$B$30=B23 แล้วให้แสดงเลข 1 ถ้าไม่เข้าเงื่อนไขให้แสดงค่า False
เมื่อเจอเลข 1 ในตำแหน่งใดก็ให้นำตำแหน่งเดียวกันของ Report1!$D$6:$D$30 มาแสดง
แล้วการใช้สูตรที่ดึงข้อมูลได้หลายเงื่อนไข เช่น Index, Match ซึ่งใช้แบบ Array หรือ Lookup มันแตกต่างกันอย่างไรตัวไหนทำงานได้เร็วและประหยัดทรัพยากรกว่ากันเมื่อข้อมูลมีปริมาณเพิ่มมากขึ้น
ขอบคุณครับ
การใช้สูตรแบบ Array โดยทั่วไปย่อมประมวลผลช้ากว่าสูตรแบบไม่เป็น Array แต่ตัวอย่างสูตร Lookup ที่ผมใช้แม้จะไม่ได้กดแป้นให้รับสูตรด้วย Ctrl+Shift+Enter แต่ Lookup เองมีสภาพเป็นสูตร Array โดยธรรมชาติ การใช้ตามที่ผมให้เป็นตัวอย่างไปนั้นก็ไม่ได้คำนวณเร็วในแบบสูตรทั่ว ๆ ไปครับ
