นายสัมฤทธิ์ สิทธิไกรพงษ์ จะได้รับค่าทำศพ 30, 000 บาท ค่าทดแทนกรณีเสียชีวิต 518, 400 บาท เงินบำเหน็จ 19, 116. 14 บาท ค่ารักษาพยาบาลเบื้องต้น 45, 000 บาท รวมเป็นเงินทั้งสิ้น 567, 516. 14 บาท 2. นายสุริน แก้วมุลี จะได้รับค่าทำศพ 30, 000 บาท ค่าทดแทนกรณีเสียชีวิต (ใช้ฐานค่าแรงขั้นต่ำรายวันเนื่องจากลูกจ้างเข้างานเมื่อ 4 พ. ย. 56 ยังไม่มีฐานการส่งเงินสมทบ เป็นจำนวน 449, 280 บาท ค่ารักษาพยาบาลเบื้องต้น 45, 000 บาท รวมเป็นเงินทั้งสิ้น 479, 280 บาท 3. นายวุฒิชัย โคตุนัน จะได้รับค่าทำศพ 30, 000 บาท ค่าทดแทนกรณีเสียชีวิต 650, 880 บาท เงินบำเหน็จ 52, 066. 95 บาท ค่ารักษาพยาบาลเบื้องต้น 45, 000 บาท รวมเป็นเงินทั้งสิ้น 777, 946. 95 บาท 4. นายวิรถ กันตะกวาง จะได้รับค่าทำศพ 30, 000 บาท ค่าทดแทนกรณีเสียชีวิต 518, 400 บาท เงินบำเหน็จ 30, 046. 24 บาท ค่ารักษาพยาบาลเบื้องต้น 45, 000 บาท รวมเป็นเงินทั้งสิ้น 578, 446. 24 บาท โดยทั้ง 4 ราย จะได้รับสิทธิประโยชน์จากกองทุนเงินทดแทนกรณีประสบอันตราเนื่องจากการทำงาน รวมเป็นเงินทั้งสิ้น 2, 403, 189. 33 บาท ส่วนอีก 5 ราย เป็นผู้ประกันตนที่ประสบอันตรายและเสียชีวิตไม่เนื่องจากการทำงานจะได้รับสิทธิจากกองทุนประกันสังคม คือ นางสาวชลนิศา คำพิมพา, นายณัฐนันท์ชัย วงจันลา, นางสาวกัญญาณัฐ นาสมทรง, นายภัทรนนท์ ยอดบ่อพลับ, นายชำนาญ ยานะ ซึ่งทั้ง 5 ราย จะได้รับค่าทำศพ เงินสงเคราะห์กรณีตาย และค่าบำเหน็จชราภาพ รวมเป็นเงินทั้งสิ้น 210, 346.
ตั้มถาม "มีสิ นั่นคือวิธีที่ 2" 2. LOOKUP ฟังก์ชันที่รองรับสูตรอาร์เรย์โดย ไม่ต้องกด Ctrl+Shift+Enter มีเพียง 4 ตัวคือ SUMPRODUCT AGGREGATE INDEX LOOKUP มาลองใช้ LOOKUP กับเคสนี้กัน หรือเขียนสูตรเป็น =LOOKUP( $C$2:$C$8) ได้ผลลัพธ์ตามต้องการ ทำไมเขียนสูตรแบบนี้? จากโครงสร้างของ LOOKUP LOOKUP( lookup_vector, [result_vector]) เคสนี้ใช้ lookup_value เป็น 2 เพื่อให้มั่นใจว่าได้ตำแหน่งสุดท้าย (หลักการเดียวกับ MATCH) ใช้ lookup_vector เป็น 1/($B$2:$B$8=F2) (หลักการเดียวกับ MATCH เช่นกัน) ความเจ๋งของ LOOKUP ที่มากกว่า MATCH คือ สามารถส่งค่ากลับมาด้วยตัวมันเอง (โดยไม่ต้องพึ่ง INDEX) ค่าที่ส่งกลับมาคือ [result_vector] หรือเคสนี้คือ $C$2:$C$8 การค้นหาของ LOOKUP เป็นแบบ Approximate Match อยู่แล้ว (จึงไม่ต้องระบุ) แถมยังไม่ต้องกด Ctrl+Shift+Enter ในทางปฏิบัติสูตรนี้จึงเป็นที่นิยม คนเก่ง ๆ หลายคนก็ใช้สูตรแบบนี้ "สูตรนี้มีข้อเสียไหมครับ? " ตั้มถาม "เรียกว่าไม่มีก็ได้นะ แต่ถ้าจะมีก็มีนิดเดียว นั่นคือสามารถเขียนสูตรให้สั้นกว่านี้ได้อีก" "สั้นกว่านี้ได้อีกหรือครับ!? " 3. LOOKUP 9^99 จากโครงสร้างของ LOOKUP จะพบว่า [result_vector] มีวงเล็บก้ามปูครอบ แปลว่าเป็นออปชัน จะใส่หรือไม่ใส่ก็ได้ ถ้าไม่ใส่ [result_vector] โปรแกรมจะส่งค่าใน lookup_vector กลับมาแทน แต่เคสนี้ระบุ lookup_vector เป็น $C$2:$C$8 หรือเขียนสูตรแบบนี้ ไม่ได้ =LOOKUP(2, $C$2:$C$8) ผลลัพธ์จะกลายเป็น #N/A ทำไม?
ลองวิเคราะห์จาก MATCH ก่อน จากโครงสร้างของฟังก์ชัน MATCH MATCH( lookup_value, lookup_array, [match_type]) เคสนี้เขียนสูตรเป็น 2, 1/($B$2:$B$8=F2), 1) ระบุ lookup_value เป็น 2 ระบุ lookup_array เป็น 1/($B$2:$B$8=F2) ระบุ [match_type] เป็น 1 เพื่อให้ค้นหาแบบ Approximate Match ทำไมระบุ lookup_array เป็น 1/($B$2:$B$8=F2)? ถ้าจะอธิบาย ต้องเริ่มจาก $B$2:$B$8=F2 $B$2:$B$8=F2 คือการเช็คว่าบรรทัดนั้นเป็น F2 (Thailand) หรือเปล่า ถ้าบรรทัดนั้นเป็น Thailand ผลลัพธ์คือ TRUE ถ้าบรรทัดนั้นเป็นประเทศอื่น ผลลัพธ์คือ FALSE ผลลัพธ์ของ $B$2:$B$8=F2 คือ {TRUE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE} หรือถ้าแสดงเป็นภาพคือ เมื่อนำ $B$2:$B$8=F2 ไปหารด้วย 1 หรือเขียนสูตรเป็น 1/($B$2:$B$8=F2) ผลลัพธ์ที่ได้คือ {1;1;#DIV/0! ;1;#DIV/0! ;1;#DIV/0! } นั่นคือบรรทัดที่เป็น Thailand จะกลายเป็น 1 ส่วนบรรทัดที่เป็นประเทศอื่นจะกลายเป็น #DIV/0! ถ้าอธิบายเป็นภาพคือแบบนี้ "ผมพอเข้าใจล่ะ แต่ ทำไมต้องใช้ lookup_value เป็น 2 ทำไมไม่ใช้ 1 ล่ะครับ? " ตั้มถาม เป็นคำถามที่ดีมาก และนั่นคือ ทริกสำคัญ ของสูตรนี้ การระบุ lookup_value เป็น 2 เพื่อให้ได้ค่าสุดท้าย!
(เหตุผลที่ใช้ทริกนี้ได้เพราะระบุการค้นหาเป็นแบบ Approximate Match) (ในทางตรงข้าม ถ้าระบุการค้นหาเป็นแบบ Exact Match จะใช้ทริกนี้ไม่ได้) เคสนี้ ผลลัพธ์ใน lookup_array มีแค่ 1 กับ #DIV/0! ฟังก์ชัน MATCH จะมองข้าม #DIV/0! หรือมองเฉพาะ 1 การใช้ lookup_value เป็น 2 เพื่อให้มั่นใจว่าได้ค่าลำดับสุดท้ายของข้อมูลที่เป็น 1 (เพราะ 2 มากกว่า 1) "งั้นถ้าไม่ใช้ 2 แต่ใช้ 3 แทนได้ไหมครับ? " "ได้แน่นอน จะเป็น 3, 10, 100, 2500 ได้ทั้งนั้น ขอให้มากกว่า 1 ก็พอ" ผมยิ้ม MATCH ในสูตรทำงานแบบนี้ =MATCH( {1;1;#DIV/0! ;1;#DIV/0! ;1;#DIV/0! }, =6 ผลลัพธ์ที่ได้คือ 6 และนั่นคือตำแหน่งสุดท้ายของ Thailand พอได้ตำแหน่งสุดท้ายแล้ว ก็ส่งค่ากลับมาด้วย INDEX หรือการทำงานของสูตรคือ {100;200;300;400;500;600;700}, 6)} =600 "อย่างนี้นี่เอง เจ๋งไปเลย" ตั้มร้อง "แต่สูตรนี้มีข้อเสียนะ" "เอ๋! มีข้อเสียด้วยเหรอครับ? " ข้อเสียสำคัญคือ ต้องกด Ctrl+Shift+Enter เพราะสูตรนี้เป็น สูตรอาร์เรย์ (Array Formula) lookup_array ใน MATCH ไม่รองรับการเขียนสูตรในลักษณะนี้ จึงต้องทำให้เป็นสูตรอาร์เรย์ (วงเล็บปีกกา ( {})ที่ครอบสูตรไม่ได้เกิดจากการพิมพ์ แต่เกิดจากการกด Ctrl+Shift+Enter) แต่.. ถ้าใครใช้ Microsoft 365 ไม่ต้องกด Ctrl+Shift+Enter เพราะ Microsoft 365 มีคุณสมบัติที่เรียกว่า Dynamic Array Formula ทุกสูตรสามารถเป็นสูตรอาร์เรย์โดยกด Enter ธรรมดา "งั้นมีวิธีที่ไม่ต้องกด Ctrl+Shift+Enter ไหมครับ? "