ไม่อยากใช้ IF ซ้อนกันเยอะๆ ทำไงดี? ep2 [Alternatives of Nested IF in Excel]

“เจอพอดีเลย พี่พอมีเวลาไหมครับ?” โจ้ทักทายผมด้วยคำถาม
“มีอะไรหรือเปล่าโจ้”
“ครั้งก่อนพี่บอกว่าจะสอนวิธีแก้ IF ซ้อนกันเยอะๆ พี่ยังไม่ได้สอนเลย”
“สอนไปแล้วไม่ใช่เหรอ?”
“พี่สอนเคสเงื่อนไขเป็น 1,2,3,4 แต่ยังไม่สอนเคสมากกว่า 50,000 เป็น Silver มากกว่า 200,000 เป็น Gold เลยครับ” โจ้ท้วง
“เออใช่ พี่ลืมไปเลย” พลางยกฝ่ามือซ้ายทาบหน้าผากตัวเอง
“เคสของโจ้เป็นไง เล่าให้พี่ฟังหน่อย”

(สำหรับใครที่ยังไม่ได้อ่านวิธีแก้ IF ซ้อนกันเยอะๆ แบบเงื่อนไขเป็น 1,2,3,4 หรือ episode1 อ่านได้จาก บทความนี้ ครับ)

ผมอยากแบ่งกลุ่มลูกค้าตามยอดขายแบบนี้ครับ

ถ้ามากกว่า 0 แต่น้อยกว่า 10,000 เป็น Standard
ถ้ามากกว่า 10,000 แต่น้อยกว่า 50,000 เป็น Black
ถ้ามากกว่า 50,000 แต่น้อยกว่า 200,000 เป็น Silver
ถ้ามากกว่า 200,000 แต่น้อยกว่า 500,000 เป็น Gold
ตั้งแต่ 500,000 ขึ้นไป เป็น Platinum

“แล้วถ้าได้ 10,000 เป๊ะล่ะ?” ผมถาม
“ถ้า 10,000 เป๊ะ เป็น Black ถ้า 50,000 เป๊ะเป็น Silver ครับ” โจ้ตอบ
“ตอนนี้ผมเขียนสูตรแบบนี้ครับ”

=IF( AND(A2>=0,A2<10000), “Standard”,
IF( AND(A2>=10000,A2<50000), “Black”,
IF( AND(A2>=50000,A2<200000), “Silver”,
IF( AND(A2>=200000,A2<500000), “Gold”,
“Platinum” ))))

(ผมเห็นสูตรแล้วหยิบยาดมท่านเจ้าคุณสีม่วงมาสูด ฟืด ฟืด)
“พี่ว่าเคสนี้ไม่จำเป็นต้องซ้อน AND ลงไปใน IF นะ “
“ลองเขียนสูตรแบบนี้ดีกว่า”

=IF(A2<10000, “Standard”,
IF(A2<50000, “Black”,
IF(A2<200000, “Silver”,
IF(A2<500000, “Gold”,
“Platinum”))))

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

1. IFS

ทำไมไม่ลองใช้ IFS ดูล่ะ !
IFS ใช้ง่าย เพราะไม่ต้องเขียน IF ซ้อนกันเยอะๆ แถมไม่ต้องปิดวงเล็บหลายชั้นด้วย

เคสนี้ถ้าใช้ IFS จะเขียนสูตรเป็น

=IFS(A2<10000, “Standard”,
A2<50000, “Black”,
A2<200000, “Silver”,
A2<500000, “Gold”,
TRUE,”Platinum”)

“ใช้ IFS ตัวเดียวเองหรือพี่ เจ๋งอ่ะ!” โจ้โห่ร้อง
“ใช่แล้ว IFS ถูกออกแบบมาเพื่อแก้ pain point ที่ต้องเขียน IF ซ้อนกัน”
“หรือจะพูดว่า IFS เกิดมาเพื่อสิ่งนี้ก็ได้” ผมยิ้มกว้าง ^__^

“ว่าแต่ TRUE ตรงเงื่อนไขสุดท้ายคืออะไรอ่ะครับ?” โจ้สงสัย
“เงื่อนไขสุดท้ายเป็น TRUE หมายความว่า ถ้า “เป็นอย่างอื่น” ให้แสดงค่าเป็น Platinum”
“คำว่า “เป็นอย่างอื่น” ก็คือมากกว่าหรือเท่ากับ 500,000 นั่นเอง”
“อ้อ”

อย่างไรก็ตาม อย่าลืมว่า IFS ใช้ได้เฉพาะ Office 365 หรือ Excel 2019 เท่านั้น
แปลว่า ถ้าใช้ Excel 2007, 2010, 2013, 2016 หมดสิทธิ์

“เมื่อกี๊พี่บอกว่ามี 4 วิธี แล้ววิธีที่สองล่ะครับ”

2 SWITCH

วิธีที่สองคือ SWITCH
จริงๆแล้ว SWITCH ใช้กับเคสนี้ตรงๆไม่ได้ เพราะโครงสร้างของ SWITCH คือ

SWITCH( expression,
value1, result1,
[value2, result2],
… ,
[default_value] )

expression รองรับค่าที่เป็นตัวเลขหรือตัวหนังสือ
แต่เงื่อนไขเคสนี้คือ A2<10,000, A2<50,000 ซึ่งเป็นตรรกะ (ให้ผลลัพธ์เป็น TRUE, FALSE) ไม่ใช่ตัวเลข ดังนั้นจะใช้ A2<10,000 เป็น expression ใน SWITCH ไม่ได้
“มีทางแก้ไหมครับ?”
“ปัญหาทุกอย่างมีไว้ทาย เอ๊ย มีไว้แก้ !!”

ทางแก้คือปรับ expression ให้เป็น TRUE
หรือเขียนสูตรเป็น

=SWITCH( TRUE,
A2<10000, “Standard”,
A2<50000, “Black”,
A2<200000, “Silver”,
A2<500000, “Gold”,
“Platinum”)

“โอ้ สูตรดูง่ายกว่า IF เพราะไม่ต้องเขียน IF ซ้อนกัน
“แต่ถ้าเทียบกับ IFS ผมว่า IFS น่าจะดีกว่านะครับ” โจ้วิเคราะห์
“ใช่เลย เพราะ SWITCH ไม่ได้เกิดมาสิ่งนี้”
“ถ้าเป็นเคสนี้ ใช้ IFS ง่ายกว่า โจ้เข้าใจถูกแล้ว” ผมอมยิ้มเพราะดีใจที่โจ้เข้าใจ

แต่อย่าลืมว่าทั้ง IFS และ SWITCH ใช้ได้เฉพาะ Office 365 หรือ Excel 2019 เท่านั้นนะ

“แล้ววิธีที่ 3 ล่ะครับพี่?”

3. CHOOSE

โจ้อาจจำง่ายๆเลยก็ได้ว่า ฟังก์ชันที่ใช้ IF ซ้อนกันเยอะๆมี 4 ฟังก์ชันคือ
1 IFS
2 SWITCH
3 CHOOSE
4 VLOOKUP

คราวนี้มาลองใช้ CHOOSE แทน IF ดูบ้าง

เคสนี้ใช้ CHOOSE ตรงๆไม่ได้ เพราะโครงสร้างของ CHOOSE คือ

CHOOSE( index_num, value1, [value2], … )

index_num ของ CHOOSE มีข้อจำกัดมากกว่า expression ของ SWITCH อีก
เพราะ index_num รองรับเฉพาะตัวเลขเท่านั้น แถมต้องเป็นตัวเลขที่เรียงกันแบบ 1,2,3,4 ด้วย

เคสนี้ต้องเขียนสูตรแบบเล่นแร่แปรธาตู โดยแบ่งตรรกะเป็น 5 เงื่อนไขคือ
1 A2>=0
2 A2>=10000
3 A2>=50000
4 A2>=200000
5 A2>=500000

แล้วปรับ index_num ให้เป็นผลรวมของตรรกะ

ถ้าเป็นจริงแค่เงื่อนไขเดียว เป็น Standard
ถ้าเป็นจริงสองเงื่อนไข เป็น Black
ถ้าเป็นจริงสามเงื่อนไข เป็น Silver
ถ้าเป็นจริงสี่เงื่อนไข เป็น Gold
ถ้าเป็นจริงห้าเงื่อนไข เป็น Platinum

หรือเขียนสูตรเป็น

=CHOOSE(
(A2>=0) +
(A2>=10000) +
(A2>=50000) +
(A2>=200000) +
(A2>=500000) ,
“Standard”,”Black”,”Silver”,”Gold”,”Platinum” )

“โห ดูยากจังพี่” โจ้ร้อง
“ใช่ พีว่า CHOOSE ไม่ค่อยเหมาะกับเคสนี้ ใช้วิธีอื่นง่ายกว่า”

“เมื่อกี๊พี่ว่าใช้ VLOOKUP ได้ด้วยใช่ไหมครับ ใช้ยังไงครับ?”

4 VLOOKUP

เคสนี้ใช้ VLOOKUP ได้แน่นอน
ก่อนเขียนสูตร เตรียมตารางอ้างอิงหน้าตาแบบนี้

จากนั้นก็เขียนสูตรเป็น

=VLOOKUP(A2,$E$2:$G$6,3,1)

“เฮ้ย! สูตรสั้นแค่นี้เองหรือพี่” โจ้ตกใจ
“ใช่ สั้นแค่นี้แหละ เจ๋งใช่ไหมล่ะ”
“ไม่คิดว่าจะง่ายขนาดนี้ แล้วที่ผ่านมาผมเขียน IF 4 ชั้น เพื่อ!!” โจ้เปลี่ยนจากตกใจเป็นเสียสติ

ทริกของสูตรนี้คือ ใช้ VLOOKUP แบบ approximate match
หรือปรับองค์ประกอบ (argument) ตัวสุดท้าย VLOOKUP เป็น 1, TRUE หรือไม่ต้องใส่ก็ได้

เช่น เขียนสูตรแบบนี้ก็ได้

หรือแบบนี้ก็ได้

(สำหรับผู้ที่สนใจ VLOOKUP แบบ approximate match อ่านรายละเอียดเพิ่มเติมได้จาก บทความนี้ ครับ)

จริงๆแล้วเคสนี้จะเตรียมตารางอ้างอิงที่มีแค่ 2 คอลัมน์แบบนี้ก็ได้นะ

แล้วปรับสูตรให้ column_index_num เป็น 2 หรือก็คือ

=VLOOKUP(A2,$E$2:$F$6,2,1)

แต่การเตรียมตารางอ้างอิงแบบแรกน่าจะง่ายต่อการสื่อสารและทำความเข้าใจมากกว่า
จริงไหม ^__^

เคสนี้ถ้าใช้ VLOOKUP มีข้อดีอีกอย่างคือ
ถ้าเงื่อนไขการจัดกลุ่มเพิ่มขึ้นเป็น 9 แบบ

ก็แค่เปลี่ยนตารางอ้างอิงจาก $E$2:$G$6 เป็น $E$2:$G$10

=VLOOKUP(A2,$E$2:$G$10,3,1)

สูตรยังคงสั้นเหมือนเดิม

แต่ถ้าใช้ IF ต้องเขียน IF ซ้อนกัน 8 ชั้น
บ้าไปแล้ว !!

“งั้นแปลว่า ใช้ VLOOKUP แทน IF ซ้อนกัน ดีที่สุดใช่ไหมพี่?” โจ้สรุป
“ถ้าเป็นเคสนี้พี่ว่าใช่ แต่เคสอื่นอาจจะไม่นะ”
“มีอะไรที่ดีกว่า VLOOKUP อีกหรือพี่?” โจ้แปลกใจ
“มีสิ ตรรกะไงล่ะ!”
“ตรรกะ? เช่นยังไงอ่ะพี่?”
“เช่น … อ้าวเฮ้ย! พี่ต้องไปรับลูกแล้ว เดี๋ยววันหลังมาคุยกันต่อนะ”
“เอาอีกแล้ว” โจ้บ่น
“น่าๆ วันนี้วันศุกร์ด้วย ออกช้าเดี๋ยวรถติด ไปก่อนนะ” ผมปิดคอมพ์แล้วรีบวิ่ง
“ห้ามเบี้ยวนะพี่” โจ้ตะโกนไล่ตามหลัง ส่วนผมไม่ได้ยินแล้ว

เนื่องจากบทความนี้ยาวมาก ขอยกยอดไปเล่าต่อใน episode 3
หรือก็คือภาคสุดท้ายของ มหากาพย์ IF ซ้อน IF ครับ ^__^

สำหรับใครที่สนใจไฟล์ตัวอย่างของบทความนี้ สามารถดาวน์โหลดเพื่อศึกษาได้เลยครับ

หากคุณชอบบทความแนวนี้ สามารถอัพเดตบทความใหม่ๆโดยคลิก Like เฟซบุ๊กแฟนเพจ วิศวกรรีพอร์ต หรือคลิก ที่นี่

อย่าลืมแชร์ให้เพื่อนอ่านเพื่อเป็นกำลังใจให้คนเขียนด้วยนะครับ ^__^

Reference:
https://www.ablebits.com/office-addins-blog/2018/05/30/choose-function-excel-formula-examples/
https://contextures.com/excelchoosefunction.html
https://www.ablebits.com/office-addins-blog/2016/07/21/function-ifs-excel2016/
https://exceljet.net/excel-functions/excel-switch-function
https://exceljet.net/nested-ifs
https://www.ablebits.com/office-addins-blog/2016/12/07/nested-if-excel-multiple-conditions/

วิศวกรรีพอร์ต

คนธรรมดาผู้มีประสบการณ์ทำงานหลากหลายตำแหน่ง คลุกคลีกับการทำรีพอร์ตมาโดยตลอด สุดท้ายค้นพบแนวทางของตัวเอง จึงอยากแบ่งปันเคล็ดลับและประสบการณ์ให้กับผู้สนใจ

3 thoughts on “ไม่อยากใช้ IF ซ้อนกันเยอะๆ ทำไงดี? ep2 [Alternatives of Nested IF in Excel]

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.