wavelengthmag.co.uk
"อยากดึงข้อมูลตัวสุดท้าย ต้องเขียนสูตรยังไงครับ? " ตั้มโพล่งขึ้น "ใช้ VLOOKUP แบบ Approximate Match ไม่ได้เหรอ? " ผมถามกลับ "ผมลองแล้ว มันดึงค่ามาผิดครับ" "เอ๋! " ข้อมูลที่ตั้มมีคือ บันทึกการขายของแต่ละประเทศ (A2:C8) สิ่งที่ต้องการคือ เขียนสูตรที่เซลล์ G2 เพื่อดึงข้อมูลค่าสุดท้ายของ Thailand ผลลัพธ์ที่ควรจะเป็นคือ 600 ถ้าใช้ VLOOKUP แบบ Approximate Match โดยเขียนสูตรเป็น =VLOOKUP(F2, $B$2:$C$8, 2, 1) ผลลัพธ์ที่ได้คือ 400 ซึ่งผิด! ทำไมจึงเป็นเช่นนั้น? เพราะ VLOOKUP แบบ Approximate Match ใช้ได้ในกรณีที่ ข้อมูลเรียงกันจากน้อยไปมาก เท่านั้น เช่นเคสนี้ ถ้าเรียงข้อมูลตามชื่อประเทศ จะได้ผลลัพธ์ตามต้องการ "แต่ผมเรียงข้อมูลแบบนั้นไม่ได้ครับ" ตั้มแย้ง "ทำไมล่ะ? " ผมถามกลับ "เพราะข้อมูลจากระบบเรียงตามวันที่ ผมเปลี่ยนข้อมูลจากระบบไม่ได้ครับ" "อ้อ" "พี่พอมีวิธีเขียนสูตรเพื่อดึงข้อมูลตัวสุดท้ายไหมครับ? " "มีสิ มีตั้ง 4 วิธีเลยนะ" "4 วิธีเลยหรือครับ! " ตั้มโพล่งเสียงดัง หมายเหตุ: บทความนี้ มีเนื้อหาประยุกต์ เหมาะกับผู้ที่มีพื้นฐานการใช้ฟังก์ชัน INDEX, MATCH และสูตรอาร์เรย์ (Array Formula) 1. INDEX+MATCH ถ้าลองเขียนสูตรโดยใช้ INDEX + MATCH {=INDEX( $C$2:$C$8, MATCH(2, 1/($B$2:$B$8=F2), 1))} จะได้ผลลัพธ์ตามต้องการ สูตรนี้ทำงานยังไง?
ลองวิเคราะห์จาก 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 เพื่อให้ได้ค่าสุดท้าย!
เทคนิคที่ใช้คือการ นำเงื่อนไขไปหาร ทำไมต้องนำเงื่อนไขไปหาร? เพื่อทำให้ บรรทัดที่ไม่ตรงกับเงื่อนไขกลายเป็น #DIV/0! เคสนี้เงื่อนไขคือ $B$2:$B$8=F2 ดังนั้นจึงเปลี่ยน lookup_vector จาก $C$2:$C$8 เป็น $C$2:$C$8 /($B$2:$B$8=F2) ผลลัพธ์จาก lookup_vector คือ =$C$2:$C$8/($B$2:$B$8=F2) ={100;200;300;400;500;600;700}/ ={100;200;#DIV/0! ;400;#DIV/0! ;600;#DIV/0! } หรือเขียนสูตรเต็ม ๆ เป็น 9^99, $C$2:$C$8/($B$2:$B$8=F2)) ได้คำตอบตามต้องการ อธิบายเป็นภาพได้แบบนี้ LOOKUP จะมองข้ามบรรทัดที่เป็น #DIV/0! คำตอบที่ได้จึงเป็นบรรทัดสุดท้ายที่ไม่ใช่ #DIV/0! เคสนี้คือ 600 "เทคนิคลึกล้ำมากเลยครับ แถมสูตรสั้นด้วย" ตั้มโพล่งขึ้น "สูตรนี้สั้นจริง แต่มีข้อเสียนิดหน่อยนะ" ข้อเสียของสูตรนี้คือ lookup_vector ต้องเป็นตัวเลขเท่านั้น เคสนี้ใช้สูตรนี้ได้ เพราะ $C$2:$C$8 เป็นตัวเลข แต่ถ้าเป็นตัวหนังสือ (Text) แบบนี้ ก็จะใช้ไม่ได้ "ตั้มใช้ Microsoft 365 หรือเปล่า? " ผมถาม "ใช้ครับ" "งั้นพี่แนะนำให้ใช้ XLOOKUP" ผมยิ้ม 4.
50 บาท โดยสำนักงานประกันสังคมจ่ายสิทธิประโยชน์กองทุนเงินทดแทนและกองทุนประกันสังคม เป็นจำนวนเงินทั้งสิ้น 2, 613, 535. 83 บาท ทั้งนี้ สำนักงานประกันสังคมจังหวัดเพชรบูรณ์ ได้ประสานผู้ที่เกี่ยวข้องชี้แจงสิทธิประโยชน์ทดแทนที่ได้รับเบื้องต้นให้ทายาทรับทราบแล้ว เพื่อจะได้ไปติดต่อขอรับเงินทดแทนและประโยชน์ทดแทนต่อไป ผู้ประกันตนท่านใดมีข้อสงสัยสอบถามข้อมูลเพิ่มเติมเกี่ยวกับสิทธิประโยชน์ ได้ที่สำนักงานประกันสังคมกรุงเทพมหานครพื้นที่ทั้ง 12 แห่ง/จังหวัด/สาขา/ที่ท่านสะดวก หรือโทร. 1506 (เจ้าหน้าที่ให้บริการตลอด 24 ชั่วโมง) ติดตามข้อมูลข่าวสารประกันสังคมผ่าน Application สำนักงานประกันสังคม ดาวน์โหลดได้ที่ Play Store>สำนักงานประกันสังคม