วันอาทิตย์ที่ 18 ตุลาคม พ.ศ. 2552

การใช้ Vlookup แทน การใช้ IF ที่มีเงื่อนไขหลายๆชั้น

เราสามารถใช้ ฟังก์ชั่น VLOOKUP แก้ปัญหาแทนการใช้ ฟังก์ชั่น IF ที่มีหลายๆเงื่อนไขได้
โดยใช้คำสั่ง VLOOKUP แบบไม่เจาะจง คือ ตัดส่วนที่ เป็น,0 หรือ ,FALSE ทิ้ง
ส่วนใหญ่มักจะยกตัวอย่างที่เห็นกันจนเจนตาคือ การใช้ VLOOKUP แทนการใช้ IF ตัดเกรด ออกมาเป็น เกรด 0 ,1, 2 ,3 ,4 หรือ เกรด A B C D F หรืออื่นๆแล้วแต่กรณี
เช่นกำหนดคะแนน และการตัดเกรดดังนี้
ต่ำกว่า 50 ให้ได้เกรด 0
ต่ำกว่า 60 ให้ได้เกรด 1
ต่ำกว่า 70 ให้ได้เกรด 2
ต่ำกว่า 80 ให้ได้เกรด 3
ตั้งแต่ 80 ขึ้นไป ได้เกรด 4


มาดูวิธีใช้ IF ก่อน
ผลการสอบของนักศึกษากลุ่มหนึ่ง และแสดงการใช้ IF ตัดเกรดตามเงื่อนไข ที่เซลล์ C3 ได้ดังตารางด้านล่าง






ถ้าใช้ VLOOKUP สามารถทำได้ดังนี้



1. สร้างตารางเงื่อนไขขึ้นมา โดยจัดเรียงเงื่อนไขจากน้อยไปมาก (บังคับ/จำเป็น)
2.ในสูตร VLOOKUP ให้ตัดส่วนสุดท้ายทิ้งไป (ตัดส่วนที่เป็น ,0หรือ,FALSE ทิ้ง)






จากโจทย์เดิม
สมมุติการตัดเกรดแบ่งออกเป็น 10 เงื่อนไขดังนี้
ต่ำกว่า 50 เกรด F
ต่ำกว่า 55 เกรด D
ต่ำกว่า 60 เกรด D+
ต่ำกว่า 65 เกรด C
ต่ำกว่า 70 เกรด C+
ต่ำกว่า 75 เกรด B
ต่ำกว่า 80 เกรด B+
ต่ำกว่า 85 เกรด A
ต่ำกว่า 90 เกรด A+
ตั้งแต่ 90 ขึ้นไป เกรด V



ทั้งหมดมี 10 เงื่อนไข ดังนั้นการใช้สูตร IF ที่ปกติจะสามารถใช้ได้เพียง 7 เงื่อนไข รวมเงื่อนไขสุดท้ายอีก 1 เงื่อนไขเป็น 8 เงื่อนไขนั้น จำเป็นต้องใช้วิธีพิเศษเข้ามาช่วยนั่นก็คือ ใช้ตัวเชื่อม & เข้ามาช่วยเพื่อให้เพิ่มเงื่อนไขได้มากขึ้น... รายละเอียด/เทคนิค และเคล็ดการซ้อน IF มากกว่า 7 เงื่อนไขนั้น จะไม่ขออธิบายในที่นี้ ในเว็บบล็อกที่ผ่านๆมาก็ยังไม่ได้เขียนลงไป เอาไว้จะเขียนให้อ่านในโอกาสต่อไป



ในที่นี้เพียงต้องการแสดงให้เห็นถึง การเปรียบเทียบการใช้ VLOOKUP และIF ที่มีเงื่อนไขหลายๆเงื่อนไข จะได้วิธีการออกมาดังตารางด้านล่าง
=IF(B4<50,"f",if(b4<55,"d",if(b4<60,"d+",if(b4<65,"c",if(b4<70,"c+",if(b4<75,"b",if(b4<80,"b+","")))))))&if(b4>=90,"V",IF(B4>=85,"A+",IF(B4>=80,"A","")))





มาดูการใช้ Vlookup ดูบ้าง

1. จากเงื่อนไขคะแนน ต้องนำมาจัดเรียงใหม่ จากน้อยไปมาก ( บังคับ / จำเป็น)

2.ในสูตร Vlookup ให้ตัดส่วนสุดท้ายทิ้งไป (ตัดส่วนที่เป็น ,0 หรือ FALSE ทิ้ง)





ทำไม Vlookup แบบไม่เจาะจง (ตัด,0 หรือ , FALSE ทิ้ง )จึงใช้แทน IF ใน "ลักษณะ " การตัดเกรดได้ ?


อธิบายแบบง่ายๆว่า Vlookup จะมองค่าตามข้อมูล หรือชุดข้อมูลที่ให้หาค่า
- ถ้าเจอหรือชนกันได้ตามเซลล์อ้างอิง ก็จะส่งค่าหรือ แสดงค่านั้นๆออกมา
- ถ้าไม่เจอหรือชนกันไม่ได้ ตามเซลล์อ้างอิง ก็จะอ่านค่าที่อยู่ต่ำกว่านั้นเสมอ
นี่เป็นคุณสมบัติประการหนึ่ง ของ Vlookup แบบไม่เจาะจง
(โดยต้องบังคับ เงื่อนไขในตาราง ให้เรียงจากน้อย ไปมาก ก่อนเสมอ )




จากตัวอย่าง การตัดเกรด
เราให้ชุดคะแนนเรียงกันดังนี้




อธิบายย่อๆได้ดังนี้


ถ้านักศึกษาสอบได้ 52 คะแนน
จะเห็นว่า 52 ไม่มีในตาราง Vlookup จะอ่านค่าที่ต่ำกว่านั้น คือ 50 และจะแสดงค่าเกรดที่ได้รับ ออกมาเป็น เกรด 1

ถ้านักศึกษาสอบได้ 30 คะแนน
จะเห็นว่า 30 ไม่มีในตาราง Vlookup จะอ่านค่าที่ต่ำกว่านั้น คือ 0 และจะแสดงค่าเกรดที่ได้รับ ออกมาเป็น เกรด 0

ถ้านักศึกษาสอบได้ 68 คะแนน
จะเห็นว่า 68 ไม่มีในตาราง Vlookup จะอ่านค่าที่ต่ำกว่านั้น คือ 60 และจะแสดงค่าเกรดที่ได้รับ ออกมาเป็น เกรด 2

ถ้านักศึกษาสอบได้ 60 คะแนน
จะเห็นว่า 60 มีในตาราง Vlookup จะอ่านค่านั้นได้เลย คือ 60 และจะแสดงค่าเกรดที่ได้รับ ออกมาเป็น เกรด 2

ถ้านักศึกษาสอบได้ 80 คะแนน
จะเห็นว่า 80 มีในตาราง Vlookup จะอ่านค่านั้นได้เลย คือ 80 และจะแสดงค่าเกรดที่ได้รับ ออกมาเป็น เกรด 4

ถ้านักศึกษาสอบได้ 95 คะแนน
จะเห็นว่า 95 ไม่มีในตาราง Vlookup จะอ่านค่าที่ต่ำกว่านั้น คือ 80 และจะแสดงค่าเกรดที่ได้รับ ออกมาเป็น เกรด 4

ในการนำไปใช้งานจริงๆนั้น อาจจะเพิ่มระดับคะแนนที่น้อยกว่า 0 หรือมากกว่า 100 ไว้ในตารางด้วยก็ได้ เพื่อป้องกัน ความผิดพลาดที่อาจจะบันทึกคะแนนเป็นลบ หรือ มากกว่า 100 เช่น คะแนนที่น้อยกว่า 0 นั้น ให้เป็นจำนวนติดลบมากๆ เช่น -9999999 หรือน้อยกว่านั้น ก็ได้ ส่วนคะแนนที่มากกว่า 100 ให้เป็น 100.000001 เป็นต้น หรืออาจจะให้ 100 คะแนนเต็ม เป็นตัวเช็คเลยก็ได้ เนื่องจาก หากมีคนที่ได้ 100 คะแนนเต็มก็ควรจะเช็ค ว่า ใช่จริงหรือไม่ เนื่องจากตามปกติ คนที่จะได้คะแนนเต็ม 100 คะแนนนั้น มีน้อย และอาจจะไม่มีเลยในการสอบ
ก็ควรเช็คดูสักเล็กน้อย ว่าใช่ตามนั้นจริงหรือไม่ ถ้าใช่ตามนั้นจริง คือ ได้ 100 คะแนนเต็ม ก็ให้เขาไปเถอะ
ยอดมนุษย์จริงๆ พับผ่า!!


ดูตัวอย่าง









อีกกรณีที่ทำได้ คือ การซ้อน IF บังคับคะแนน ติดลบหรือมากกว่า 100 ไว้ใน Vlookup วิธีนี้ ไม่จำเป็นต้อง เพิ่มบรรทัดในชุดข้อมูลที่ให้อ่านค่า สำหรับคะแนนที่เป็นลบ และมากกว่า 100



ทั้ง 2 วิธี เป็นตัวอย่างที่แสดงให้เห็นลีลาของมันว่า มันทำงานอย่างไร และให้เห็นรูปแบบที่แตกต่างกัน แต่ผลลัพท์ตรงกัน
สามารถนำไป ประยุกต์ในการใช้งานจริงได้ ชอบแบบไหนก็เลือกใช้กันเอาเอง ส่วนใครจะคิดวิธีอื่นๆขึ้นมาได้ ซึ่งมีอีกเยอะแยะ หลายวิธี ก็ไม่ว่ากัน


อีกซักตัวอย่าง