เขียน Nested Conditions แบบคูลๆด้วยฟังชั่น IF IFS และ XLOOKUP

บทความนี้แอดมาสอนเขียนฟังชั่น IF IFS และ XLOOKUP ใน Excel เพื่อสร้างโปรแกรมตัดเกรดนักเรียนง่ายๆ (nested conditions) มีทั้งหมด 6 เกรดตั้งแต่ A-F โดยเกณฑ์การตัดเกรดนักเรียนเป็นดังนี้

เกณฑ์การตัดเกรด
  • ถ้าใครยังไม่รู้จัก XLOOKUP ลองอ่านบทความเก่าของเราได้ที่นี่
  • IF, IFS, XLOOKUP เป็นฟังชั่นสำหรับงาน data analytics ที่ทุกคนควรใช้ให้เป็น

ดาวน์โหลดไฟล์ตัวอย่าง Excel สำหรับบทความนี้ได้ที่นี่ ข้อมูลคะแนนนักเรียนอยู่ในคอลัมน์ A ส่วนเกรดที่คำนวณจากฟังชั่น IF IFS และ XLOOKUP อยู่ในคอลัมน์ B C D ตามลำดับ

การเขียน IF IFS และ XLOOKUP เพื่อสร้างเงื่อนไขหลายชั้นใน Excel
ตัวอย่างการเขียนฟังชั่น IF IFS XLOOKUP ทั้งสามวิธีได้ผลเหมือนกัน

IF (column B)

มาเริ่มกันที่ฟังชั่นที่มีมานานที่สุดใน Excel คือฟังชั่น IF ที่มี syntax การเขียนง่ายๆแบบนี้ =IF(condition, TRUE, FALSE) ถ้าเราต้องการเขียนเงื่อนไขซ้อนกันหลายๆชั้น ก็สามารถทำได้ด้วยการเขียน nested IF แบบนี้ IF(IF(IF … ))) ซึ่งเป็นวิธีที่เขียนสูตรที่ยุ่งยากและมีโอกาสผิดสูง (i.e. error prone) เราไม่แนะนำให้ใช้เท่าไหร่ ถ้าใครใช้ Excel เวอร์ชั่น 2016 ขึ้นไป แอดแนะนำให้ข้ามไปอ่านวิธีการเขียนฟังชั่น IFS เลย

  • เวลาเขียนสูตรใน Excel เราสามารถกด ALT + ENTER พร้อมกันเพื่อขึ้นบรรทัดใหม่ได้ แอดแนะนำให้ขึ้นบรรทัดใหม่เวลาสูตรที่เราเขียนยาวมากๆ มีหลาย arguments อย่างเวลาเขียน nested IF แบบเก่า
=IF(A2>=90, "A",
 IF(A2>=80, "B",
 IF(A2>=70, "C",
 IF(A2>=60, "D",
 IF(A2>=50, "E", "F")))))

IFS (column C)

สำหรับ Excel 2016/ Office 365 จะมีฟังชั่น IFS ที่เขียน nested IF ได้ง่ายกว่าเดิมมาก =IFS(condition1, output1, condition2, output2, … ) เราสามารถเขียนเงื่อนไขได้หลายข้อ แต่แอดแนะนำว่าไม่ควรเกิน 5-6 ข้อ

ทำไมถึงไม่ควรเขียน IFS เกิน 5-6 ข้อ? เพราะสูตรมันจะยาว ปั๊ดโถ่! ไปใช้ XLOOKUP() ดีกว่า 😛

=IFS(A2>=90, "A",
     A2>=80, "B",
     A2>=70, "C",
     A2>=60, "D",
     A2>=50, "E",
     A2<50 , "F")

XLOOKUP (column D)

ถ้ามีเงื่อนไขมากกว่า 5-6 ข้อ เช่น ต้องการตัดเกรด A A- B+ B- C+ C- มากกว่าสิบเกรด สร้าง lookup table ตามตัวอย่างด้านล่างและใช้ฟังชั่น XLOOKUP() จะได้ผลลัพธ์ง่ายและเร็วที่สุดเลย เชื่อพี่!

lookup table สำหรับตัดเกรด

XLOOKUP() มีสาม required arguments อ่านการใช้งานฟังชั่นนี้ได้ในบทความที่แล้วของเรา สำหรับ [if_not_found] ให้เราปล่อยว่างได้เลย และใส่ [match_mode] เท่ากับ -1

อธิบาย [match_mode] = -1 แปลว่า “Exact match or next smaller item” ถ้าคะแนนสอบนักเรียนได้ 65 XLOOKUP จะดึงเกรด D มาแสดงเพราะ 60 < 65 ดังนั้นให้แสดงเกรด D ตาม logic ของ [match_mode]

=XLOOKUP(A2, lookup_table, $G$2:$G$7, , -1)

ทั้งสามฟังชั่น IF IFS และ XLOOKUP จะได้ผลลัพธ์เหมือนกันเลย จะใช้ฟังชั่นไหนก็อยู่ที่ความถนัด (และความชอบ) ของแต่ละคนเลย ส่วนตัวแอดคิดว่า IFS และ XLOOKUP คือฟังชั่นที่มีประสิทธิภาพที่สุดสำหรับงานนี้

XLOOKUP เขียนสั้นและง่ายที่สุด

อยากเรียนฟังชั่นอะไรอีก? คอมเม้นต์บอกเราได้ใต้โพสต์นี้เลยครับ 😛

Leave a Reply