IFS ทดสอบหลายเงื่อนไขตามลำดับที่กำหนด และคืนค่าของเงื่อนไขแรกที่เป็น TRUE แล้วหยุดทำงานทันที โครงสร้างเป็นคู่ (เงื่อนไข, ผลลัพธ์) ซ้ำได้สูงสุด 127 คู่ ทำให้อ่านและเขียนง่ายกว่า Nested IF แบบซ้อนชั้น ควรใส่ TRUE เป็นเงื่อนไขสุดท้ายเพื่อกำหนดค่า default ป้องกัน #N/A error มีตั้งแต่ Excel 2019 และ Microsoft 365 เท่านั้น
| อาร์กิวเมนต์ | ชนิด | คำอธิบาย |
|---|---|---|
| logical_test1 | Logical | เงื่อนไขแรกที่ต้องการทดสอบ ต้องให้ผลลัพธ์เป็น TRUE หรือ FALSE เท่านั้น ถ้าเป็น TRUE จะคืนค่า value_if_true1 ทันทีและหยุดการตรวจสอบเงื่อนไขที่เหลือ ใช้ตัวดำเนินการเปรียบเทียบ (>=, <=, =, , ) หรือฟังก์ชันที่คืนค่า logical เช่น AND, OR, ISBLANK, ISNUMBER |
| value_if_true1 | Any | ค่าที่จะคืนกลับมาเมื่อ logical_test1 เป็น TRUE สามารถเป็นตัวเลข ข้อความ วันที่ ค่า Boolean สูตรคำนวณ หรือ cell reference ก็ได้ อนุญาตให้เป็นค่าว่าง (empty) ได้ด้วย |
| [logical_test2]ไม่บังคับ | Logical | เงื่อนไขที่ 2 ที่จะทดสอบต่อ ถ้า logical_test1 เป็น FALSE สามารถเพิ่มเงื่อนไขได้ต่อเนื่องสูงสุด 127 คู่ (logical_test, value_if_true) โดยทดสอบตามลำดับจากซ้ายไปขวา |
| [value_if_true2]ไม่บังคับ | Any | ค่าที่จะคืนกลับมาเมื่อ logical_test2 เป็น TRUE สามารถเป็นประเภทข้อมูลใดก็ได้เหมือน value_if_true1 |
| […]ไม่บังคับ | Logical/Any | สามารถเพิ่มคู่ (logical_test, value_if_true) ได้อีกสูงสุด 125 คู่ รวมเป็น 127 คู่ทั้งหมด แนะนำให้ใส่ TRUE เป็น logical_test สุดท้ายพร้อมค่า default เพื่อป้องกัน #N/A error เมื่อไม่มีเงื่อนไขใดเป็น TRUE |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
IFS เป็นฟังก์ชันที่ทดสอบหลายเงื่อนไขตามลำดับและคืนค่าของเงื่อนไขแรกที่เป็น TRUE แล้วหยุดการทำงานทันที
.
ที่เจ๋งคือ IFS ช่วยให้เราเขียนเงื่อนไขซับซ้อนได้อ่านง่ายกว่า Nested IF มากครับ ไม่ต้องมานั่งซ้อนวงเล็บหลายชั้นจนงง 😅
.
โครงสร้างเป็นคู่ (logical_test, value_if_true) วางเรียงกันไป รองรับได้สูงสุด 127 คู่เงื่อนไข แต่ส่วนตัวผมว่าถ้าเกิน 10 เงื่อนไขควรพิจารณาใช้ lookup table แทนนะครับ 💡
.
ข้อสำคัญ: ควรใส่ TRUE เป็น logical_test สุดท้ายเสมอเพื่อกำหนดค่า default ป้องกัน #N/A error เมื่อไม่มีเงื่อนไขใดตรงเลย นี่คือ best practice ที่ผมแนะนำให้ทำทุกครั้งครับ 😎
.
มีตั้งแต่ Excel 2019 และ Microsoft 365 เท่านั้น ถ้าใช้เวอร์ชันเก่ากว่าจะต้องใช้ Nested IF แทนนะครับ
ใช้ IFS เพื่อแปลงคะแนนตัวเลข (0-100) เป็นเกรด (A-F) หรือระดับการประเมิน (ดีเยี่ยม, ดี, ปานกลาง, ปรับปรุง) แบบอัตโนมัติ เหมาะกับระบบการศึกษา HR performance review
กำหนดอัตราส่วนลดหรือค่าคอมมิชชั่นที่แตกต่างกันตามยอดซื้อ ยอดขาย หรือปริมาณที่สั่งซื้อ โดยแบ่งเป็นช่วงระดับ (tier) เช่น ซื้อครบ 100,000 ได้ส่วนลด 5%, ครบ 500,000 ได้ 10%
แบ่งลูกค้าเป็น VIP tier (Diamond, Platinum, Gold, Silver, Bronze) ตามยอดซื้อสะสม หรือจัดหมวดหมู่สินค้าเป็น Premium, Standard, Economy ตามช่วงราคาหรือคุณสมบัติ
สร้างระบบแจ้งเตือนตามเงื่อนไข เช่น แจ้งสถานะสินค้าคงคลัง (Out of Stock, Low Stock, In Stock, Overstock) หรือสถานะโครงการ (Urgent, High Priority, Normal, Low Priority) ตามข้อมูลที่กำหนด
คำนวณค่าจัดส่ง ค่าธรรมเนียมธนาคาร หรือค่าบริการที่ขึ้นอยู่กับหลายตัวแปร เช่น ระยะทาง น้ำหนัก ประเภทลูกค้า ใช้ IFS ร่วมกับ AND/OR เพื่อรองรับเงื่อนไขที่ซับซ้อน
ทดสอบคะแนน 85: เงื่อนไข 85>=90 เป็น FALSE (ข้ามไป) → เงื่อนไข 85>=80 เป็น TRUE → คืนค่า "B" ทันทีและหยุดทำงาน ไม่ทดสอบเงื่อนไข 85>=70, 85>=60 และ TRUE ที่เหลือ
การใช้ TRUE เป็นเงื่อนไขสุดท้ายจะทำให้มั่นใจว่า ถ้าไม่ตรงเงื่อนไขใด (เช่น คะแนนต่ำกว่า 60) จะได้เกรด F แทนที่จะเป็น #N/A error 💡
สมมติ SalesAmount เป็น Named Range ที่มีค่า 300,000: ทดสอบ 300000>=500000 FALSE → 300000>=300000 TRUE → คืนค่า 300000*0.10 = 30,000 บาท
ตัวอย่างนี้แสดงการใช้สูตรคำนวณใน value_if_true แทนที่จะเป็นค่าคงที่ และใช้ TRUE, 0 สำหรับยอดขายต่ำกว่า 100,000 ไม่ได้ค่าคอมมิชชั่น
สังเกตนะครับว่า ลำดับเงื่อนไขต้องเรียงจากมากไปน้อย (500k → 300k → 100k) เพื่อให้ได้ผลถูกต้อง
ใช้ structured reference [@TotalPurchase] จาก Excel Table ชื่อ Customers เพื่ออ้างอิงค่ายอดซื้อสะสมในแถวเดียวกัน
ถ้ายอดซื้อ 250,000: ทดสอบ 250000>=1000000 FALSE → 250000>=500000 FALSE → 250000>=100000 TRUE → คืนค่า "Gold"
การใช้ structured reference ทำให้สูตร copy ลงไปแต่ละแถวได้อัตโนมัติ โดยไม่ต้องปรับ cell reference และอ่านเข้าใจง่ายกว่าด้วยครับ 😎
สมมติ DataCell เป็น Named Range ที่อ้างถึงเซลล์ที่มีค่า 1250: ISBLANK(1250) FALSE → ISERROR(1250) FALSE → ISNUMBER(1250) TRUE → คืนค่า "ตัวเลข"
ตัวอย่างนี้แสดงการเรียง logical_test ตามลำดับความเฉพาะเจาะจง โดย ISBLANK และ ISERROR ควรอยู่ก่อนเพราะเป็นกรณีพิเศษที่ต้องจัดการก่อน
ลำดับเงื่อนไขมีความสำคัญมากครับ ถ้าเรียงผิด อาจได้ผลลัพธ์ไม่ตรงความต้องการ
สมมติ Score และ Attendance เป็น Named Ranges: ทดสอบ AND(75>=80, 85>=90) ทั้งคู่ต้อง TRUE แต่ 75>=80 FALSE ดังนั้น AND คืนค่า FALSE → ทดสอบ AND(75>=70, 85>=80) ทั้งคู่เป็น TRUE → คืนค่า "Good"
ตัวอย่างนี้แสดงการใช้ IFS กับ logical functions เช่น AND (ต้องตรงทุกเงื่อนไข) และ OR (ตรงเงื่อนไขใดเงื่อนไขหนึ่ง) เพื่อสร้างเงื่อนไขที่ซับซ้อนขึ้น
คะแนน 45 ไม่ตรงเงื่อนไขใดเลย (45>=80 FALSE, 45>=70 FALSE, 45>=60 FALSE) และไม่มี TRUE เป็นค่า default จึงได้ #N/A error
นี่เป็นข้อผิดพลาดที่พบบ่อยมากครับ 😅 แนะนำให้ใส่ TRUE เป็น logical_test สุดท้ายเสมอ เช่น =IFS(45>=80, "A", 45>=70, "B", 45>=60, "C", TRUE, "F") จะได้ผลลัพธ์ "F" แทน #N/A ✨
IFS และ Nested IF ให้ผลลัพธ์เหมือนกัน แต่ IFS อ่านง่ายกว่ามาก โดยเฉพาะเมื่อมีหลายเงื่อนไข ไม่ต้องนับวงเล็บปิดซ้อนกัน 😎
เพิ่มเงื่อนไขใหม่ก็ง่ายกว่า เพียงแค่เพิ่มคู่ (logical_test, value_if_true) ท้ายสุด
อย่างไรก็ตาม Nested IF มีข้อดีคือ short-circuit evaluation (หยุดทำงานทันทีเมื่อเจอ TRUE) ส่วน IFS จะ evaluate ทุกเงื่อนไขก่อน ซึ่งอาจส่งผลต่อประสิทธิภาพในกรณีสูตรซับซ้อน
สมมติ Region และ Weight เป็น Named Ranges: ตรวจสอบ AND("Bangkok"="Bangkok", 3<=2) FALSE → AND("Bangkok"="Bangkok", 3<=5) TRUE → คืนค่า 80 บาท
ตัวอย่างนี้แสดงการใช้ IFS กับเงื่อนไขหลายมิติ (ทั้งภูมิภาคและน้ำหนัก) เหมาะกับการคำนวณค่าจัดส่งที่มีหลายตัวแปร โดยใช้ AND เพื่อรวมเงื่อนไข และ TRUE เป็นค่า default สำหรับของหนักเกิน 5 กก. นอกกรุงเทพฯ 📦
IFS เขียนและอ่านง่ายกว่า Nested IF เพราะไม่ต้องซ้อนวงเล็บหลายชั้น โครงสร้างเป็นคู่ (logical_test, value_if_true) วางเรียงกันไปตามลำดับ
เปรียบเทียบกันดูนะครับ:
– Nested IF: =IF(A>=90,"A",IF(A>=80,"B",IF(A>=70,"C","F")))
– IFS: =IFS(A>=90,"A",A>=80,"B",A>=70,"C",TRUE,"F")
ยิ่งมีหลายเงื่อนไข IFS ยิ่งอ่านง่ายกว่ามาก อย่างไรก็ตาม Nested IF มี true short-circuit evaluation (หยุดทำงานทันทีเมื่อเจอ TRUE และไม่ evaluate เงื่อนไขที่เหลือ) ส่วน IFS จะ evaluate ทุก expression ก่อน ซึ่งอาจส่งผลต่อประสิทธิภาพในกรณีที่มีสูตรคำนวณซับซ้อนใน value_if_true
ส่วนตัวผมแนะนำใช้ IFS เมื่อต้องการความอ่านง่าย และใช้ Nested IF เมื่อต้องการประสิทธิภาพสูงสุดครับ
เกิด #N/A error เพราะไม่มีเงื่อนไขใดเป็น TRUE เลย และไม่ได้ใส่ค่า default ไว้
วิธีแก้คือเพิ่ม TRUE เป็น logical_test สุดท้ายเสมอ พร้อมกำหนดค่า default ที่ต้องการ เช่น =IFS(Score>=80,"A",Score>=70,"B",TRUE,"C") จะได้ "C" เมื่อคะแนนต่ำกว่า 70 แทนที่จะเป็น #N/A
การใส่ TRUE ท้ายสุดเป็น best practice ที่สำคัญของการใช้ IFS ครับ เพราะเงื่อนไข TRUE จะเป็น TRUE เสมอ ทำให้มั่นใจว่าจะมีค่าคืนกลับมาเสมอ 💡
สำคัญมากครับ! IFS ทดสอบเงื่อนไขตามลำดับจากซ้ายไปขวาและคืนค่าทันทีเมื่อเจอเงื่อนไขแรกที่เป็น TRUE แล้วหยุดการทำงาน
ดังนั้นต้องเรียงเงื่อนไขจากเฉพาะเจาะจงที่สุดไปยังกว้างที่สุด
ตัวอย่างเช่น: ถ้าต้องการตัดเกรด ต้องเรียง Score>=90 (A) ก่อน Score>=80 (B) ก่อน Score>=70 (C)
ถ้าเรียงกลับกัน (70 ก่อน 80 ก่อน 90) คะแนน 95 จะได้เกรด C เพราะ 95>=70 เป็น TRUE แล้ว ทำให้ไม่ถึงการทดสอบ 95>=80 และ 95>=90 เลย
นี่เป็นข้อผิดพลาดที่พบบ่อยมากครับ ระวังให้ดีนะครับ 😅
IFS มีตั้งแต่ Excel 2019, Excel 2021 และ Microsoft 365 เท่านั้น ไม่มีใน Excel 2016, 2013, 2010 หรือเวอร์ชันเก่ากว่า รองรับทั้ง Windows, Mac และ Excel for the web ถ้าใช้งานกับเวอร์ชันเก่ากว่า 2019 ให้ใช้ Nested IF แทน หรือพิจารณาใช้ CHOOSE ร่วมกับ MATCH สำหรับกรณีที่เป็นการเลือกตาม index
IFS ใช้ logical operators (>=, =80
ส่วน SWITCH เปรียบเทียบค่าเท่ากัน (exact match) เท่านั้น เหมาะกับการเลือกตามค่าคงที่ เช่น Region="North" และ SWITCH มี default value built-in อยู่แล้ว ไม่ต้องใส่ TRUE
แนะนำใช้ SWITCH เมื่อเปรียบเทียบค่าเท่ากันหลายตัวเลือก (อ่านง่ายกว่า) และใช้ IFS เมื่อต้องการเงื่อนไขที่ซับซ้อนหรือเปรียบเทียบช่วงค่า
ตัวอย่าง: =SWITCH(Region,"North",10%,"South",8%,5%) กับ =IFS(Region="North",10%,Region="South",8%,TRUE,5%) ให้ผลเหมือนกัน แต่ SWITCH อ่านง่ายกว่าครับ
IFS รองรับได้สูงสุด 127 คู่ (logical_test, value_if_true) แต่ถ้ามีเงื่อนไขเยอะมากควรพิจารณาใช้วิธีอื่น เช่น XLOOKUP, SWITCH หรือ lookup table เพื่อความอ่านง่ายและบำรุงรักษาง่ายกว่า
ข้อจำกัดอื่นๆ:
1) logical_test ต้องคืนค่า TRUE/FALSE เท่านั้น ถ้าไม่ใช่จะได้ #VALUE! error
2) ถ้าไม่มีเงื่อนไขใดเป็น TRUE และไม่มีค่า default จะได้ #N/A
3) IFS ไม่มี true short-circuit evaluation ทำให้อาจช้ากว่า Nested IF ในกรณีสูตรซับซ้อน
4) ความยาวสูตรรวมต้องไม่เกิน 8,192 ตัวอักษร (ข้อจำกัดของ Excel)
ใช้ IFS เมื่อ:
1) มีเงื่อนไข 3-10 เงื่อนไข (มากกว่านี้อ่านยาก)
2) เงื่อนไขใช้ comparison operators (>=,
IFS สามารถคืนค่า error ได้ 3 แบบ:
1) #N/A error เมื่อไม่มีเงื่อนไขใดเป็น TRUE และไม่มีค่า default → แก้ด้วยการใส่ TRUE เป็นเงื่อนไขสุดท้าย
2) #VALUE! error เมื่อ logical_test ไม่ได้คืนค่า TRUE/FALSE (เช่น ใส่ตัวเลขหรือข้อความ) → ตรวจสอบให้แน่ใจว่าเงื่อนไขใช้ comparison operators หรือ logical functions
3) "You've entered too few arguments" เมื่อมี logical_test แต่ไม่มี value_if_true คู่กัน → ตรวจสอบว่ามี argument ครบคู่ (logical_test, value_if_true)
นอกจากนี้ถ้ามี error ใน cell ที่ reference (เช่น #DIV/0!) จะส่งต่อ error นั้นมาด้วย สามารถใช้ IFERROR หรือ ISERROR เพื่อจัดการ error ได้ เช่น =IFS(ISERROR(A1),"Error",A1>=80,"Pass",TRUE,"Fail")
ฟังก์ชันที่ผู้เขียนโยงไว้กับ IFS จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
AND ตรวจสอบเงื่อนไขได้สูงสุด 255 เงื่อนไข โดยจะคืนค่า TRUE ก็ต่อเมื่อ Logical ทุกตัว (logical1, logical2,…) ให้ผลเป็น TRUE ทั้งหมด
.
เรียกได้ว่าเป็นแบบ 'เข้มงวด' ที่ต้องผ่านทุกข้อถึงจะได้ TRUE ครับ ถ้าสักข้อเดียวเป็น FALSE… จบเลย 😅
IF เป็นฟังก์ชันตรรกะพื้นฐานที่ใช้ตัดสินใจสองทางตามเงื่อนไข ตรวจสอบว่าเงื่อนไขเป็น TRUE หรือ FALSE แล้วคืนค่าที่แตกต่างกันไปตามผลลัพธ์ สามารถใช้ได้กับการเปรียบเทียบตัวเลข ข้อความ หรือวันที่ และเป็นพื้นฐานสำคัญของการสร้างสูตรแบบมีเงื่อนไข
IFERROR ช่วยดักจับ Error ทุกประเภทที่เกิดขึ้นในสูตร (#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!) แล้วเปลี่ยนเป็นค่าที่เราต้องการแทน
.
ที่เจ๋งคือมันช่วยให้รายงานและ Dashboard ดูสะอาด ไม่มี Error แสดงให้ผู้ใช้งานเห็น โดยถ้าสูตรไม่มี Error ก็จะ return ผลลัพธ์ปกติ
.
ส่วนตัวผมคิดว่าฟังก์ชันนี้เป็น "ตัวช่วยมหาเทพ" สำหรับคนทำรายงานเลยครับ 😎
OR คือฟังก์ชันตรรกศาสตร์ที่ตรวจสอบเงื่อนไขได้สูงสุด 255 ข้อ และจะคืนค่า TRUE ถ้ามี 'เงื่อนไขใดเงื่อนไขหนึ่ง' เป็นจริง เป็นเครื่องมือจำเป็นสำหรับการสร้างเงื่อนไขที่ยืดหยุ่น
SWITCH ประเมินนิพจน์หรือค่าหนึ่งค่า แล้วเปรียบเทียบกับรายการค่าที่กำหนดตามลำดับ เมื่อพบค่าที่ตรงกันจะส่งคืนผลลัพธ์ที่เชื่อมโยงทันที หากไม่ตรงกับค่าใดเลยสามารถกำหนด default value ได้ เหมาะสำหรับแทนที่ nested IF หลายชั้นด้วยไวยากรณ์ที่อ่านง่ายกว่ามาก
CHOOSE เลือกค่าจากรายการค่าตามหมายเลขลำดับที่ระบุ เป็นเหมือนการเลือกรายการจากเมนู ส่งคืนค่าที่ตำแหน่งที่กำหนด มีประโยชน์ในการสร้างสูตรแบบเลือกตามเงื่อนไข
SEARCH ค้นหาตำแหน่งของคำที่ต้องการในข้อความหลัก ถ้าเจอคืนตัวเลขตำแหน่งที่พบ ถ้าไม่เจอคืน #VALUE! ต่างจาก FIND ตรงที่ไม่แยกแยะตัวพิมพ์เล็ก-ใหญ่ (A=a) และใช้ wildcard (* กับ ?) ค้นหาแบบมีรูปแบบได้ เอาไปต่อกับ ISNUMBER ก็กลายเป็นสูตรเช็คว่าเซลล์มีคำนี้อยู่หรือไม่ ซึ่งเป็นวิธีที่ใช้กันบ่อยที่สุดในงานจัดหมวดหมู่หรือกรองข้อมูลจากคำสำคัญ
SUMIFS บวกค่าจาก sum_range เฉพาะแถวที่ตรงตามเงื่อนไขทุกข้อพร้อมกัน (AND logic) รองรับได้สูงสุด 127 คู่เงื่อนไข สามารถใช้ comparison operators (>, =, <=, ), wildcard characters (*, ?), และ cell references ใน criteria ได้ เหมาะสำหรับการวิเคราะห์ข้อมูลแบบ multi-dimensional filtering เช่น รายงานยอดขายตามภูมิภาค ช่วงเวลา และสถานะพร้อมกัน โดยไม่ต้องใช้ helper columns หรือฟังก์ชันซ้อนซับซ้อน
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่