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

“ไม่อยากใช้ IF ซ้อนกันเยอะๆ ทำไงดีครับพี่” จู่ๆโจ้ก็ยิงคำถามใส่
“มันต้องดูเคสด้วยน่ะ เคสของโจ้เป็นยังไงเหรอ” ผมถามกลับ
“ยังงี้ครับพี่”
ถ้าได้ 1 ให้แสดงเป็น Thailand
ถ้าได้ 2 ให้แสดงเป็น Japan
ถ้าได้ 3 ให้แสดงเป็น China
ถ้าได้ 4 ให้แสดงเป็น Korea
ถ้าได้ค่าอื่น ให้แสดงเป็น Others

“ตอนนี้ผมใช้ IF ซ้อนกัน 4 ชั้น แบบนี้ครับ”

=IF( A2=1,”Thailand”,
IF(A2=2,”Japan”,
IF(A2=3,”China”,
IF(A2=4,”Korea”,
“Others”))))

“ผมว่าสูตรมันไม่ค่อยโอเท่าไร แต่ไม่รู้จะแก้ยังไง พี่มีวิธีอื่นไหมครับ?”

หลังเห็นสูตร ผมหยิบยาดมส้มมือขึ้นมาสูดสองปื้ด แล้วพูดว่า
“มีสิ มีตั้ง 4 วิธีเลยนะ”

1. IFS

เคสนี้ถ้าใช้ IF จะมี IF 4 ตัว เวลาขึ้นเงื่อนไขใหม่ต้องเขียน IF ซ้อนไปเรื่อยๆ ตอนปิดวงเล็บก็ต้องปิด 4 ชั้น สูตรมันก็เลยดูยาก

แต่ถ้าใช้ IFS สูตรจะมีแค่ชั้นเดียว หรือกลายเป็น

=IFS(A2=1,”Thailand”,
A2=2,”Japan”,
A2=3,”China”,
A2=4,”Korea”,
TRUE, “Others” )

ดูสั้นลงใช่ไหม แถมมี IFS แค่ตัวเดียวด้วย ^__^

มาทำความรู้จักกับ IFS กันครับ
โครงสร้างของ IFS คือ

IFS( logical_test1, value_if_true1, [logical_test2, value_if_true2], … )

logical_test คือ เงื่อนไข เช่น เคสนี้คือ A2=1, A2=2, A2=3, A2=4

value_if_true คือ ค่าที่แสดงถ้าเงื่อนไขนั้นเป็นจริง เช่น เคสนี้คือ Thailand, Japan, China, Korea

ทราบไหมครับว่า IFS รองรับ logical_test ได้ถึง 127 เงื่อนไข (เยอะไปไหมอ่ะ!)

เนื่องจากเคสนี้กำหนดเงื่อนไขว่า ถ้า A2 ได้ค่าอื่นนอกเหนือจาก 1-4 ให้แสดงเป็น Others ก็เลยปรับเงื่อนไขสุดท้ายเป็น
TRUE, “Others”
อันนี้เป็นเทคนิคลับเลยนะ ห้ามบอกใครล่ะ ^^

IFS มีข้อเสียที่สำคัญคือ ใช้ได้เฉพาะ Office 365 หรือ Excel 2019 เท่านั้น
แปลว่า ถ้าใครใช้ Excel 2007, 2010, 2013, 2016 หมดสิทธิ์ !

“อืมม์.. สูตรมันดูสั้นลงกว่า IF ก็จริง แต่มันก็ยังดูยาวอยู่ดี มีวิธีอื่นไหมครับ?”
“มีสิ นั่นคือวิธีที่ 2 CHOOSE”

2. CHOOSE

เคสนี้ถ้าใช้ CHOOSE เขียนสูตรได้เป็น

=CHOOSE( A2, “Thailand”, “Japan”, “China”, “Korea” )

สูตรดูสั้นดีใช่ไหมครับ ^__^

มาทำความรู้จักฟังก์ชัน CHOOSE กันนิดนึงครับ
โครงสร้างของ CHOOSE คือ

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

index_num คือตัวเลข เช่น เคสนี้คือ A2 (มีค่าได้เป็น 1,2,3,4)

value1, [value2] คือ ค่าที่ต้องการแสดงผล เช่น เคสนี้คือ Thailand, Japan, China, Korea

index_num รองรับค่าได้ตั้งแต่ 1 ถึง 254 หรือรองรับค่าได้ทั้งหมด 254 แบบ
แต่อย่าใช้ถึงขั้นนั้นเลย โหดเกิน ^^

“โอ! สูตรสั้นลงตั้งเยอะ ดีขึ้นเยอะเลย” โจ้ร้อง
“ดูเผินๆเหมือนจะดีขึ้น แต่สูตรนี้อาจมีปัญหานะ” ผมเตือน
“ยังไงหรือครับพี่”

index_num (เคสนี้คือ A2) ต้องมีค่าสอดคล้องกับ value1, value2, value3
เคสนี้เตรียม value ไว้แค่ 4 ตัวคือ Thailand, Japan, China, Korea
ถ้า index_num เป็น 5 หรือมากกว่า 5 จะได้ผลลัพธ์เป็น #VALUE!

“งั้นแก้ไขยังไงดีครับ?”
ทางแก้คือต้องใส่ IFERROR ครอบเผื่อไว้เลย
เช่น เปลี่ยนสูตรเป็น

=IFERROR( CHOOSE(A2,”Thailand”,”Japan”,”China”,”Korea”), “Others”)

“ก็ยังดูโอกว่า IF 4 ชั้น หรือ IFS นะครับพี่” โจ้ลงความเห็น

CHOOSE เป็นฟังก์ชันที่ใช้ง่าย แต่มีข้อจำกัดพอควร
ข้อจำกัดที่สำคัญคือ index_num ต้องเป็นตัวเลขเท่านั้น เป็นตัวหนังสือไม่ได้ !

เช่น จากเคสเดิม ถ้าเปลี่ยน index_num หรือ A2 เป็นตัวหนังสือ จะได้ผลลัพธ์เป็น #VALUE! ทั้งหมด

นอกจากนี้ index_num ต้องเป็นตัวเลขที่เรียงกันด้วย
ถ้าตัวเลขไม่เรียงกัน เช่น
1 = Thailand
5 = Japan
10 = China
20 = Korea
ใช้ CHOOSE ไม่ได้

“อ้าว.. มีข้อจำกัดเยอะเหมือนกันนะเนี่ย” โจ้แอบเซ็ง

CHOOSE ถ้าใช้เดี่ยวๆมีข้อจำกัดค่อนข้างเยอะ ในทางปฏิบัติมักใช้ร่วมกับฟังก์ชันอื่น เช่น ใช้ร่วมกับ VLOOKUP เพื่อดึงข้อมูลจากคอลัมน์ด้านซ้ายมือ
แต่ก็มีบางเคสที่ CHOOSE อาจเป็นทางเลือกที่ดี

“งั้นเคสนี้ ถ้าไม่ใช่ IF, IFS, CHOOSE มีวิธีอื่นไหมครับ?”
“มีสิ นั่นคือ SWITCH”

3. SWITCH

เคสนี้ ถ้าใช้ SWITCH เขียนสูตรได้เป็น

=SWITCH( A2,
1,”Thailand”,
2,”Japan”,
3,”China”,
4,”Korea”,
“Others” )

“ดูเจ๋งดีนะครับพี่” โจ้ร้องขึ้น

มาทำความรู้จักฟังก์ชัน SWITCH กันนิดนึง
โครงสร้างของ SWITCH คือ

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

expression คือค่าที่มีโอกาสเป็น value1, value2, … เช่น เคสนี้คือ A2

result1 คือ ผลลัพธ์ เมื่อต้นทางเป็น value1

result2 คือ ผลลัพธ์ เมื่อต้นทางเป็น value2

เคสนี้ถ้าใช้ SWITCH ไม่จำเป็นต้องใช้ IFERROR ครอบ เพราะถ้าเป็นค่านอกเหนือจาก value1, value2, value3 ก็เซ็ตเป็น default_value ได้เลย
เช่น เซ็ต default_value เป็น Others)

SWITCH รองรับ value1, value2, value3, … ได้สูงสุดถึง 126 ค่า (เยอะไปป่ะ ^^)

ความเจ๋งของ SWITCH เมื่อเทียบกับ CHOOSE คือ value ไม่จำเป็นต้องเรียงลำดับ (1,2,3,4) และเป็นได้ทั้งตัวเลขหรือตัวหนังสือ (text)
นั่นคือ จากเคส CountryCode ถ้าใช้ SWITCH จะไม่เกิด error

ความเจ๋งของ SWITCH เมื่อเทียบกับ IFS คือ เขียนเงื่อนไข (expression) แค่ครั้งแรกครั้งเดียว แต่ IFS ต้องเขียนซ้ำหลายรอบ

“SWITCH ดูเจ๋งดีนะครับพี่ มีข้อเสียไหมครับ”
ข้อเสียที่สำคัญของ SWITCH คือ ใช้ได้เฉพาะ Office 365 หรือ Excel 2019 เท่านั้น
นั่นแปลว่า Excel 2007/ 2010/ 2013/ 2016 หมดสิทธิ์ !!

“อืมม์ ใช้ SWITCH ได้ แต่สูตรก็ยังดูยาว มีวิธีอื่นที่สูตรสั้นๆไหมครับ?”
“มีสิ VLOOKUP ไงล่ะ”

4. VLOOKUP

ก่อนใช้ VLOOKUP เคสนี้ต้องสร้างตารางช่วยเพื่ออ้างอิงผลลัพธ์ที่ต้องการก่อน เช่น

แล้วเขียนสูตรเป็น

=VLOOKUP(A2,$E$2:$F$5,2,0)

“บ๊ะ! ผมลืม VLOOKUP ได้ไงเนี่ย” โจ้โพล่งขึ้น
“สูตรสั้น แล้วก็ง่ายด้วย” โจ้ยกมือขวาขึ้นเขกหัวตัวเอง
“ถ้าคิดตามเงื่อนไขตรงๆ มันก็คิดได้แต่ IF ไง ต้องคิดมุมอื่นบ้าง” ผมยื้ม ^__^

โครงสร้างของ VLOOKUP คือ

VLOOKUP( lookup_value, table_array, column_index_num, [range_lookup] )

ผมเคยเขียนบทความอธิบายวิธีใช้งาน VLOOKUP ไว้แล้ว ถ้าสนใจ อ่านได้จาก บทความนี้

“ว่าแต่ ถ้าเขียนสูตรแค่นี้ จะมี error นะ”
“ยังไงครับพี่” โจ้ถาม
“ยังงี้ไง”

“แก้ยังไงดีครับพี่”
“ก็ครอบด้วย IFERROR เหมือนเดิมไง”
หรือเขียนสูตรเป็น

=IFERROR(VLOOKUP(A2,$E$2:$F$5,2,0),”Others”)

ถ้าสร้างตารางช่วยได้ VLOOKUP เป็นทางเลือกที่ดีมาก เพราะสูตรสั้น อีกทั้งถ้าเกิดการเปลี่ยนแปลงหรือมีเงื่อนไขเพิ่มเติมก็แก้ที่ตารางช่วยนั้นได้เลย
เช่น เพิ่มเงื่อนไขเป็น 12 ประเทศ ก็ปรับตารางช่วยเป็นหน้าตาแบบนี้

สูตรก็ยังใช้เหมือมเดิม แค่ขยายขอบเขตของตารางช่วยจาก $E$2:$F$5 เป็น $E$2:$F$13 เท่านั้นเอง หรือก็คือ

=VLOOKUP(A2,$E$2:$F$13,2,0)

ในทางตรงข้าม ถ้าใช้ SWITCH สูตรจะดูไม่ค่อยโอแล้ว

=SWITCH( A2,
1,”Thailand”,
2,”Japan”,
3,”China”,
4,”Korea”,
5,”Hong Kong”,
6, “Singapore”,
7, “USA”,
8,”Canada”,
9,”France”,
10,”Germany”,
11,”Italy”,
12,”England”,
“Others” )

เคส 12 ประเทศนี้ จะใช้ IF, IFS, CHOOSE ก็ดูไม่ค่อยโอเท่าไร

“งั้นก็แปลว่า ถ้าไม่อยากใช้ IF ซ้อนกันเยอะๆ ใช้ VLOOKUP แทนดีที่สุดใช่ไหมครับ?” โจ้สรุป
“ดูเผินๆแล้ว VLOOKUP สูตรสั้นสุด แต่ก็มีข้อเสียนะ” ผมแย้ง
“ข้อเสียคืออะไรครับพี่?” โจ้สงสัย
“ข้อเสียคือต้องสร้างตารางช่วย หรือจากเคสเดิมคือ $E$2:$F$5″

“VLOOKUP มันไม่จบในตัวเองเหมือน IF, IFS, CHOOSE หรือ SWITCH”
“ใช่เลยพี่ บางทีผมไม่อยากสร้างตารางช่วย อยากให้สูตรจบในตัวมากกว่า” โจ้สนับสนุน
“ถ้าไม่อยากสร้างตารางช่วย ต้องทำยังไงครับ?” โจ้เกิดความคิดสร้างสรรค์

ถ้าไม่อยากสร้างตารางช่วย งั้นก็ต้องสร้างเป็น Array Constant เช่น

{1,”Thailand”;2,”Japan”;3,”China”;4,”Korea”}

หรือปรับสูตรเป็น

=VLOOKUP(A2,{1,”Thailand”;2,”Japan”;3,”China”;4,”Korea”},2,0)

“Array Constant” คืออะไรครับพี่?”
“ถ้าอธิบายง่ายๆ Array Constant คือการสร้างตารางลงในสูตรตรงๆนั่นเอง”
“มีวิธีสร้างยังไงครับ?”
มีกฎในการสร้าง 3 ข้อ

1 ขึ้นต้นและลงท้ายด้วยวงเล็บปีกกา ( { …. } )
2 ถ้าข้อมูลมีหลายคอลัมน์ ให้คั่นข้อมูลด้วย comma ( , ) เช่น 1, “Thailand”
3 ถ้าข้อมูลมีหลายบรรทัด ให้คั่นด้วย semicolon เช่น 1, “Thailand” ; 2, “Japan”

“ดูวุ่นวายเหมือนกันนะครับ” โจ้เห็นสูตรแล้วเริ่มปวดหัว
“ใช่ การเขียน array constant มีโครงสร้างที่ต้องทำตามแบบเป๊ะๆ อาจดูวุ่นวายเล็กน้อย”

ถ้าเงื่อนไขไม่เยอะมาก และมองว่าต้องการให้สูตรจบในตัว การใช้ CHOOSE, SWITCH อาจเป็นทางเลือกที่ดีกว่า VLOOKUP + Array Constant”
ลองเทียบ

=IFS( A2=1,”Thailand”,
A2=2,”Japan”,
A2=3,”China”,
A2=4,”Korea”,
TRUE,”Others” )

=CHOOSE( A2,
“Thailand”,
“Japan”,
“China”,
“Korea” )

=SWITCH( A2,
1,”Thailand”,
2,”Japan”,
3,”China”,
4,”Korea”,
“Others” )

=VLOOKUP( A2,
{1,”Thailand”;
2,”Japan”;
3,”China”;
4,”Korea”},
2, 0 )

แล้วดูว่าชอบแบบไหน
ทุกวิธีมีทั้งข้อดี-ข้อเสีย ขึ้นกับบริบทของเคสนั้นๆ

ถ้าสร้างตารางช่วยไม่ได้ CHOOSE เขียนสูตรสั้นที่สุด แต่รองรับเฉพาะ index_num ที่เป็นตัวเลขเท่านั้น และอาจต้องครอบด้วย IFERROR

IFS ดูเป็นทางเลือกที่ดีกว่า IF แบบธรรมดา แต่มีข้อเสียคือ ต้องเขียนเงื่อนไขหลายรอบ และต้องใช้ Office 365 หรือ Excel 2019

SWITCH เป็นทางเลือกที่ดีกว่า IFS แต่ข้อเสียคือต้องใช้ Office 365 หรือ Excel 2019

“พอเข้าใจแล้วครับพี่” โจ้พยักหน้าหงึกๆ

“ขอถามเพิ่มได้ไหมครับ”
“สั้นๆละกันนะ”
“เคสนี้เงื่อนไขเป็น 1,2,3,4 ก็เลยทำแบบนี้ได้ แต่ถ้าเงื่อนไขไม่ใช่แบบนี้ล่ะครับ”
“ยังไงเหรอ”

“เช่น ถ้ายอดขายมากกว่า 10,000 จัดเป็น Black ถ้ายอดขายมากกว่า 50,000 จัดเป็น Silver ถ้ายอดขายมากกว่า 100,000 จัดเป็น Gold อะไรประมาณนี้น่ะครับ”
“เคสนี้ก็ใช้ทั้ง IFS, CHOOSE, SWITCH, VLOOKUP แทน IF ได้เหมือนกัน”
“ใช้ได้ด้วยหรือครับ ใช้ยังไงครับ?”
“พอดีพี่ต้องไปรับลูกที่โรงเรียนน่ะ เดี๋ยววันหลังมาคุยกันต่อนะ”
“ว๊า กำลังมันส์เลย” โจ้รำพัน …

เนื่องจากบทความนี้ยาวมากแล้ว ขอยกยอดไปเล่าต่อในภาค 2 นะครับ ^__^

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

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

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

Credit:
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/

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

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

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

  1. ขอบคุณมากครับ เหมือนนั่งฟังพี่เลี้ยงสอนงานเพลินๆเลย

Leave a Reply

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