Tag: switch

  • IF vs IFS vs SWITCH vs LET ใครคิดเร็ว ใครคิดช้า? มาเรียนรู้วิธีทำให้สูตร Excel เร็วขึ้น

    IF vs IFS vs SWITCH vs LET ใครคิดเร็ว ใครคิดช้า? มาเรียนรู้วิธีทำให้สูตร Excel เร็วขึ้น

    บทความนี้จะพาคุณลึกเข้าไปใน “Performance” ของฟังก์ชันตรวจสอบเงื่อนไขใน Excel
    ตั้งแต่ IF() พื้นฐาน ไปจนถึง IFS(), SWITCH(), LET() และเทคนิคซ่อนสูตรด้วย LAMBDA() เพื่อเลื่อนการคำนวณ จับเวลาด้วย LET() + NOW() แล้วแสดงผลเป็นมิลลิวินาที (ms) ให้เห็นกันชัด ๆ


    🌟 1. ทำไมต้องสนใจ Performance ของสูตร?

    เมื่อสูตร Excel ซับซ้อนขึ้น หรือมีการคำนวณกับ dataset ขนาดใหญ่ ความเร็วในการคำนวณ (calculation speed) จะกลายเป็นปัจจัยสำคัญ

    • ถ้าเราซ้อน VLOOKUP/XLOOKUP/MAKEARRAY/FILTER หลายครั้งในเงื่อนไขที่ไม่จำเป็น → Excel จะ “คิด” ทุกเงื่อนไขซ้ำนับร้อยครั้ง
    • สูตรที่ช้าไม่ใช่แค่รอผลนาน แต่ยังกินทรัพยากรเครื่อง และอาจทำให้ workbook ทั่วทั้งไฟล์อืดตาม

    บทความนี้อ้างอิงแนวคิดจาก

    The SWITCH and LET functions – Excel formula performance
    by Owen Price (Microsoft MVP)
    ซึ่งลงลึกเรื่องว่า IF() กับ CHOOSE() ให้การประมวลผลแบบ lazy evaluation (short‑circuit) แต่ IFS()/SWITCH()/LET() จะคำนวณ ทุก พารามิเตอร์โดยไม่เลือก


    🔧 2. วิธีจับเวลาใน Excel แบบง่าย ๆ ด้วย LET() + NOW()

    Excel ไม่มีฟังก์ชัน Timer เหมือนภาษาโปรแกรม แต่เราสามารถวัดเวลาคร่าว ๆ ได้ด้วยสูตรนี้ (เพราะใน LET จะไล่คำนวณจากบนลงล่าง แม้จะไม่ได้เรียกใช้ตัวแปรนั้นๆ เลย) :

    =LET(
      start,     NOW(),           // เก็บเวลาเริ่มต้น (หน่วยวัน)
      result,    <สูตรที่อยากวัด>,   // สูตรหนัก ๆ เช่น MAKEARRAY
      elapsed,   NOW() - start,   // ผลต่าง (หน่วยวัน)
      elapsedMs, elapsed * 24 * 60 * 60 * 1000,  // แปลงมิลลิวินาที
      elapsedMs                   // คืนค่าเวลา (ms)
    )

    หมายเหตุ:

    • ค่าที่ได้เป็นการประมาณ ไม่แม่นยำระดับ millisecond เป๊ะ ๆ แต่ใช้เปรียบเทียบระหว่างสูตรได้ดีและง่าย โดยไม่ต้องใช้ VBA จับเวลา

    🧪 3. ชุดทดสอบ: MAKEARRAY(2000,2000,PRODUCT)

    เพื่อให้เห็นภาพชัดที่สุด เราใช้สูตรสร้าง array ขนาดใหญ่ เบิ้มๆ ไปเลย:

    =MAKEARRAY(2000, 2000, PRODUCT)

    เป็นการคูณเลขแถว × เลขคอลัมน์ จำนวน 4 ล้านเซลล์ → Excel ต้องคำนวณนานหลายร้อยมิลลิวินาที

    จากนั้นเอาสูตรนี้ไปใส่ใน IF(), IFS(), SWITCH(), LET() และ LET+LAMBDA() แล้วดู ค่าเวลา (ms) จริงที่ได้

    IF vs IFS vs SWITCH vs LET ใครคิดเร็ว ใครคิดช้า? มาเรียนรู้วิธีทำให้สูตร Excel เร็วขึ้น 1
    สูตรพฤติกรรมคำนวณผลลัพธ์ (ms)สรุป
    MAKEARRAYคำนวณตรง ๆ~400ความเร็วที่ต้องใช้สูตร
    IF(TRUE,…)ถ้าเงื่อนไขเป็น TRUE → ไม่ประมวล MAKEARRAY~0✅ Lazy & เร็ว
    IFS(TRUE,…, FALSE, MAKEARRAY)ประมวลทุกเงื่อนไข แม้ไม่จำเป็น~420❌ ช้า
    SWITCH(1,1,…,2,MAKEARRAY)ประมวลทุกทางเลือก~420❌ ช้า
    LET(slow,MAKEARRAY, result)ประกาศตัวแปรก็เรียกคำนวณทันที แม้ไม่ได้ใช้~420❌ ช้า
    LET(thunk, LAMBDA(MAKEARRAY), result)เก็บสูตรไว้ใน LAMBDA ไม่ประมวลจนกว่าจะเรียก ()~0✅ Lazy & เร็ว

    🧠 4. เจาะลึกแต่ละฟังก์ชัน

    4.1 IF() – ขี้เกียจแบบฉลาด ทำให้คำนวณเร็ว 😂

    =IF(condition, value_if_true, value_if_false)
    =IF(TRUE, "เร็ว", MAKEARRAY(1000,1000,PRODUCT))
    • Short‑circuit (lazy): ถ้า condition = TRUE → Excel จะไม่ไปคำนวณ value_if_false เลย
    • เช่น ในทีนี้จะไม่คำนวณตรง MAKEARRAY(1000,1000,PRODUCT) เลย
    • เหมาะกับกรณีที่เงื่อนไขหลักมีโอกาสเป็นจริงสูงมาก

    Tips : พวก IFNA, IFERROR ก็คำนวณเร็วเช่นกันนะ

    4.2 IFS() – อ่านง่าย เขียนง่าย แต่ขยันเกิน ทำให้ช้า

    =IFS(cond1, val1, cond2, val2, …)
    =IFS(
        TRUE, "เร็ว",
        FALSE, MAKEARRAY(2000,2000,PRODUCT)
      )
    • ไม่ short‑circuit: Excel จะประมวล ทุกเงื่อนไข condN, valN แม้จะเจอเงื่อนไขแรกเป็นจริงแล้วก็ตาม (ทำเพื่อ! 😅)
    • เช่น ในที่นี้แม้ Condition แรกจะจริงไปแล้ว แต่ก็มาคิด Condition ที่สองต่อ ทำให้ยังคำนวณ MAKEARRAY(2000,2000,PRODUCT) ช้าๆ ออกมาอยู่ดี
    • ถ้าใช้ภายใน IFS() สูตรหนัก ๆ หลายตัว → ช้ากว่าซ้ำนับครั้งไม่ถ้วน

    4.3 SWITCH() – อ่านเปรียบเทียบค่าคงที่ได้ดี แต่ขยันเกินจนช้า

    =SWITCH(expression, val1, res1, val2, res2, …)=SWITCH(1,
        1, "เร็ว",
        2, MAKEARRAY(2000,2000,PRODUCT)
      )
    
    • ไม่ short‑circuit: Excel จะคำนวณทุกเงื่อนไข แม้ expression จะตรงกับ val1 ตั้งแต่แรกแล้ว
    • เช่น ในทีนี้ แม้ expression จะเป็น 1 ซึ่งตรงอันแรกแล้ว มันก็ยังคิด 2 ที่เป็น MAKEARRAY ช้าๆ อยู่ดี
    • อ่านง่ายกว่าซ้อน IF/IFS แต่หากมีสูตรหนักก็ไม่ work

    Tips: ใช้ CHOOSE จะ Short-circuit ทำให้เร็วได้ เช่น

    =CHOOSE(3, "A", "B", MAKEARRAY(2000,2000,PRODUCT))  // ถ้าเลือก 3 จะคำนวณ MAKEARRAY แค่ครั้งเดียว

    4.4 LET() – ลดการคำนวณตอนเรียกใช้ซ้ำแต่คำนวณทุกค่าที่ประกาศไว้

    =LET(name1, expr1, name2, expr2, …, result)
    =LET(slow, MAKEARRAY(2000,2000,PRODUCT),
      result, "เร็ว",
      result)
    • ทุก exprN ที่มีการประกาศตัวแปรไว้ จะถูกประมวลผลทันทีเมื่อสูตรรัน โดยไม่สนว่า nameN จะถูกนำไปใช้ใน result สุดท้ายหรือไม่
    • เช่น ในทีนี้ตัวแปร slow ไม่ได้ถูกเรียกใช้ในตอนจบเลย แต่ก็ยังคำนวณ MAKEARRAY ช้าๆ อยู่ดี
    • ใช้ลดการซ้ำของสูตร เช่น VLOOKUP ครั้งละหลายรอบได้ดี แต่ประกาศตัวแปรหนัก ๆ แล้วไม่ได้ใช้ → ก็ยังช้าเหมือนเดิม

    4.5 LET() + LAMBDA() – “Thunk” เลื่อนการคำนวณได้

    =LET(
      Thunk, LAMBDA(MAKEARRAY(2000,2000,PRODUCT)),
      result,    "เร็ว",
      result
    )
    • เมื่อประกาศตัวแปร ที่ใช้ LAMBDA ครอบไว้ → Excel จะไม่ประมวล MAKEARRAY ทันที
    • ถ้าต้องการคำนวณจริง ๆ ให้เรียก Thunk() โดยต้องเติมวงเล็บ () ไว้ข้างหลังด้วยนะ แบบนี้
    =LET(
      Thunk, LAMBDA(MAKEARRAY(2000,2000,PRODUCT)),
      result,    "เร็ว",    Thunk())

    🚀 5. ทริกปรับสูตรให้เร็วขึ้น

    1. ใช้ IF() แทน IFS() ถ้าเงื่อนไขแรกมีโอกาสเป็น TRUE สูง
    2. ห่อสูตรหนัก ๆ ใน LAMBDA() แล้วเรียกเมื่อจำเป็น
    3. ลดการคำนวณซ้ำ ด้วย LET() แต่แน่ใจว่าชื่อที่ประกาศจะถูกใช้จริง
    4. เลือก CHOOSE() แทน SWITCH() เมื่อค่าต้องเลือกเป็นลำดับ (1,2,3…) เพื่อได้ lazy evaluation

    ✨ 6. สรุปอีกทีให้เซฟเก็บ

    • IF(), IFNA(), IFERROR() = ✅ Lazy Evaluation ทำให้เร็ว : หยุดคำนวณเงื่อนไขหลังทันที
    • IFS() = ❌ Eager Evaluation ทำให้ช้า: คิดทุกเงื่อนไข
    • CHOOSE() = ✅ Lazy Evaluation ทำให้เร็ว : คิดเฉพาะทางเลือกที่เลือกจริงๆ
    • SWITCH() = Eager Evaluation ทำให้ช้า: คิดทุกทางเลือก
    • LET() = Eager Evaluation ทำให้ช้า: คิดทุกตัวแปร
    • LET+LAMBDA() = Lazy Evaluation ทำให้เร็ว: เลื่อนคำนวณจนกว่าจะเรียกใช้

    ใครกำลังเจอ Excel อืดเพราะสูตรซ้อนซับซ้อน ลองเอาแนวทางนี้ไปปรับใช้ดูครับ
    – บางทีแค่เปลี่ยนจาก IFS → IF หรือห่อสูตรใน LAMBDA ก็ช่วยลดเวลาไปได้ครึ่งหนึ่ง!

    ถ้าคิดว่าบทความนี้เป็นประโยชน์ อย่าลืมแชร์หน้านี้ให้เพื่อน ๆ เห็นทริกเทพเอ็กเซลกันเยอะ ๆ นะครับ 😉

  • SWITCH

    TLDR สรุปสั้นๆ

    SWITCH เปรียบเทียบค่ากับรายการผลและคืนค่าตามผลที่ตรงกัน หรือค่าเริ่มต้นถ้าไม่มีค่าตรงกัน

    คำอธิบาย

    ฟังก์ชัน SWITCH ใน Excel ใช้เปรียบเทียบค่าหนึ่ง (ที่เรียกว่า expression) กับรายการของค่าอื่น ๆ และคืนค่าผลลัพธ์ที่ตรงกับค่าที่พบเป็นอันดับแรก ถ้าไม่มีค่าที่ตรงกัน สามารถระบุค่าเริ่มต้นให้คืนได้

    มีครั้งแรกในเวอร์ชันไหน

    2019

    รูปแบบคำสั่ง (Syntax)

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

    Arguments

    • expression (Required – value)
      ค่าที่จะถูกนำมาเปรียบเทียบกับ value1…value126 สามารถเป็นเลข วันที่ หรือข้อความได้
    • value1…value126 (Required – value)
      ค่าแต่ละค่าที่จะถูกนำมาเปรียบเทียบกับ expression
    • result1…result126 (Required – result)
      ค่าที่จะคืนเมื่อ valueN ตรงกับ expression ต้องมีค่าในแต่ละ value ที่ตรงกัน
    • default (Optional – result)
      ค่าที่จะคืนเมื่อไม่มีค่าใดตรงกันใน valueN ค่าเริ่มต้นจะต้องเป็นสุดท้ายในฟังก์ชัน

    ตัวอย่างการใช้งาน (Examples)

    • Formula:
      =SWITCH(WEEKDAY(A2),1,"Sunday",2,"Monday",3,"Tuesday","No match")
      Description: ตรวจสอบว่า WEEKDAY ของเซลล์ A2 คือค่าใด ในกรณีนี้ A2=2 จึงคืนค่า Monday
      Result:Monday (ประเภทข้อความ)
    • Formula:
      =SWITCH(A3,1,"Sunday",2,"Monday",3,"Tuesday")
      Description: เนื่องจากไม่มีค่าตรงกันและไม่ได้ระบุค่าเริ่มต้น SWITCH จะคืนค่า #N/A เพราะไม่พบค่าใดตรงกัน
      Result:#N/A (แสดงว่าไม่มีค่าตรงกัน)
    • Formula:
      =SWITCH(A4,1,"Sunday",2,"Monday",3,"Tuesday","No match")
      Description: ตรวจสอบค่าจากเซลล์ A4 แต่ไม่มีค่าตรงกัน จึงคืนค่า "No match" ซึ่งระบุไว้เป็นค่าเริ่มต้น
      Result:No match (ประเภทข้อความ)
    • Formula:
      =SWITCH(C2, 1, "One", 2, "Two", 3, "Three", 4, "Four", 5, "Five")
      Description: ใช้ SWITCH เพื่อตรวจค่าในเซลล์ C2 และคืนค่าตัวอักษรที่ตรงกับค่า
      Result:ตัวอักษรที่ตรงกับค่าใน C2 (ประเภทข้อความ)
    • Formula:
      =SWITCH(TRUE, C2<=10000, "5%", C2<=20000, "4.5%", "4%")
      Description: ตรวจสอบอัตราดอกเบี้ยตามยอดเงินกู้ในเซลล์ C2 คืนค่าเป็นเปอร์เซนต์ที่ตรง
      Result:5% หรือ 4.5% หรือ 4% (ตามเงื่อนไข ค่าการคืนอาจจะเป็น ข้อความ)

    Tips & Tricks

    สามารถประยุกต์ใช้ SWITCH ร่วมกับฟังก์ชันอื่น ๆ เช่น IF หรือ CHOOSE เพื่อสร้างสูตรที่ซับซ้อนมากขึ้นและกำหนดเงื่อนไขตามต้องการ

    ข้อควรระวัง (Cautions)

    ในกรณีที่ไม่มีการระบุค่าเริ่มต้น (default) และไม่มีค่าที่ตรงกัน ฟังก์ชัน SWITCH จะคืนค่า #N/A ซึ่งอาจทำให้เกิด error ได้

    ฟังก์ชันที่เกี่ยวข้อง

    References

    ขอบคุณที่เข้ามาอ่านนะครับ ❤️

  • สอนใช้ฟังก์ชัน IF และผองเพื่อน (IFS, SWITCH)

    สอนใช้ฟังก์ชัน IF และผองเพื่อน (IFS, SWITCH)

    หนึ่งในฟังก์ชันที่ถูกใช้บ่อยที่สุดอันนึงในการเขียนสูตร Excel ก็คือฟังก์ชันที่ชื่อว่า IF ซึ่งมีความสามารถในการเขียนสูตรแบบมีเงื่อนไข ซึ่งเวลาผมสอนมักจะบอกเสมอว่า หากในหัวเรานึกถึงคำว่า “ถ้า” ก็ให้นึกถึง IF ได้เลย ซึ่งนอดีตผมเคยเขียนบทความเกี่ยวกับ IF ไว้แล้ว แต่วันนี้จะมา Refresh ให้ใหม่ พร้อมแนะนำเพื่อนๆ ของมันคือ IFS และ SWITCH ด้วย

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

    เช่น สมมติเราจะให้ขนมเป็นของรางวัลเด็ก โดยมีเงื่อนไขว่า จะให้จำนวนขนมตามอายุของเด็ก แต่ถ้าอายุเกิน 10 ปี จะได้ครึ่งนึงของอายุ (เศษปัดทิ้ง) เช่น อายุ 8 ขวบได้ขนม 8 ชิ้น แต่ถ้า 13 ขวบ จะได้ 6 ชิ้น เป็นต้น

    เริ่มจากการคิด Logic ของ Decision Tree

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

    if

    ถ้ามีปัญหาเหล่านี้ สิ่งที่ผมอยากบอกคือ อย่าเพิ่งเขียนสูตร แต่ให้ลองเขียนแผนผังการตัดสินใจแบบ Decision Tree ขึ้นมาก่อน (ถ้าเรายังไม่ค่อยคล่อง) เพื่อให้เราสามารถเข้าใจภาพรวมทั้งหมด และคิดเป็นระบบมากขึ้น โดยตกผลึกความคิดได้อย่างชัดเจนก่อนว่าวิธีคิดคำตอบมันมีกี่กรณี ตัวแบ่งคืออะไร?

    จะเห็นว่าผลลัพธ์ของโจทย์นี้มีอยู่ 2 กรณี คือ

    1. กรณีอายุเกิน 10 ปี : ได้ครึ่งนึงของอายุ (เศษปัดทิ้ง) ซึ่ง สูตรผลลัพธ์คือ INT(เลขอายุ/2)
    2. กรณีอายุไม่เกิน 10 ปี : ได้ตามอายุ ซึ่ง สูตรผลลัพธ์คือ เลขอายุ

    พอเห็นแบบนี้ดังนั้นเงื่อนไขที่เราต้องเช็คก็คือ “อายุเกิน 10 ปีหรือไม่?” นั่นเอง

    ดังนั้นสามารถเขียนสูตรได้แบบนี้

    การเขียนสูตร IF

    สูตร IF 1 ตัว จะแยกผลลัพธ์ได้เป็น 2 แบบ ดังนี้

    =IF(logical_test,value_if_true,value_if_false)
    =IF(เงื่อนไข,ถ้าเงื่อนไขจริงจะทำอะไร,ถ้าเงื่อนไขเป็นเท็จจะทำอะไร)
    
    Tips : ตรงส่วน logical_test นั้นโดยทั่วไปเราจะใส่สูตรเพื่อให้ออกมาเป็นค่า TRUE/FALSE แต่มันยังสามารถรับค่าที่เป็นตัวเลขได้ด้วย (ถ้าเป็นเลข 0 จะเป็น FALSE ส่วนเลขอื่นๆ จะเป็นจริงทั้งหมด)

    ดังนั้นในเคสนี้ สูตรจึงออกมาเป็นแบบนี้

    =IF(อายุ > 10,INT(อายุ/2),อายุ)
    สอนใช้ฟังก์ชัน IF และผองเพื่อน (IFS, SWITCH) 2

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

    ส่วน logical_test

    การจะเขียนสูตรในส่วนของ logical_test ได้ จะต้องเข้าใจเรื่องดังนี้มาก่อน

    • การจะได้ค่า TRUE/FALSE เกิดได้จาก 2 กรณีหลักๆ คือ
      • การใช้เครื่องหมายเปรียบเทียบ เช่น =, >, <, >=, <=, <> (ไม่เท่ากับ) เช่น ในเคสนี้มีการเทียบว่า อายุ >10 หรือไม่?
      • การฟังก์ชันพวกกลุ่ม IS… เช่น ISNUMBER, ISERROR
    • ฟังก์ชันตรรกศาสตร์เพื่อรวบเงื่อนไขหลายๆ อันเข้าด้วยกัน
      • AND เงื่อนไขย่อยๆ ทุกอันต้องเป็นจริงทั้งหมด จึงจะให้ผลลัพธ์เป็นจริง เขียนในรูปแบบ AND(เงื่อนไข1,เงื่อนไข2)
      • OR เงื่อนไขย่อยๆ อย่างน้อยอันใดอันหนึ่งเป็นจริง จึงจะให้ผลลัพธ์เป็นจริง เขียนในรูปแบบ OR(เงื่อนไข1,เงื่อนไข2)
      • NOT กลับจริงเป็นเท็จ เท็จเป็นจริง เขียนในรูปแบบ NOT(เงื่อนไข)

    Tips : ตรงส่วน logical_test นั้นโดยทั่วไปเราจะใส่สูตรเพื่อให้ออกมาเป็นค่า TRUE/FALSE แต่มันยังสามารถรับค่าที่เป็นตัวเลขได้ด้วย (ถ้าเป็นเลข 0 จะเป็น FALSE ส่วนเลขอื่นๆ จะเป็นจริงทั้งหมด) ดังนั้นมันจึงเหมาะกับการใช้ Boolean Logic แทนการใช้ AND, OR ใน Array Formula มากๆ ซึ่งถ้าใครสนใจลองอ่านได้ที่นี่

    ส่วนของ value_if_true, value_if_false

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

    แล้วถ้าผลลัพธ์มีมากกว่า 2 กรณีล่ะ?

    อย่างที่ผมบอกไปก่อนหน้านี้ว่า IF สามารถแสดงผลลัพธ์ได้ 2 กรณี หลายคนอาจะสงสัยว่า แล้วถ้าผลลัพธ์มีมากกว่า 2 กรณีล่ะ? จะทำไง?

    ผมจะขอแนะนำแบบนี้ครับ

    ถ้าผลลัพธ์ของแต่ละกรณี สามารถใช้การ Lookup ได้ ให้ Lookup

    พูดง่ายๆ มันถ้าสิ่งที่เราต้องการ สามารถใช้การสร้างตารางอ้างอิงแล้วดึงค่ากลับมาได้ เช่น การดึงชื่อพนักงานจากรหัสพนักงาน ประเภทสินค้าจากรหัสสินค้า หรือแม้แต่การตัดเกรดจากคะแนนที่ได้ พวกนี้ควรใช้สูตรพวก Lookup/Reference เช่น VLOOKUP, INDEX+MATCH, XLOOKUP แทนการใช้ IF ครับ เพราะจะเขียนสูตรง่ายกว่า แถมยืดหยุ่นและแก้เงื่อนไขได้ง่ายกว่าการใช้ IF เยอะเลย

    สอนใช้ฟังก์ชัน IF และผองเพื่อน (IFS, SWITCH) 3

    ถ้าผลลัพธ์ของแต่ละกรณี Lookup ไม่ได้

    สอนใช้ฟังก์ชัน IF และผองเพื่อน (IFS, SWITCH) 4

    เช่น จากข้อมูลข้างต้น เรามีเงื่อนไขการลดราคาว่า

    • ถ้าซื้อเกิน 3 ชิ้น ลด 10%
    • ถ้าซื้อตั้งแต่ 5 ชิ้นขึ้นไป และชำระเงินเป็นเงินสด ถึงจะลด 15%

    แบบนี้เราจะใช้พวกสูตรกลุ่ม Lookup ไม่ได้แล้วครับ แต่จะต้องใช้ IF ซ้อนกัน/IFS/SWITCH มาช่วยแทน

    และเราก็ควรคิดให้ดีก่อนว่า ควรพิจารณาเงื่อนไขไหนก่อนดี ซึ่งถ้าไล่ให้ครบจริงๆ ต้องเขียนให้มีผลลัพธ์ 3 แบบดังนี้

    • ถ้าซื้อตั้งแต่ 5 ชิ้นขึ้นไป และชำระเงินเป็นเงินสด ถึงจะลด 15%
      (เราต้องคิดอันนี้ก่อนเรื่องซื้อเกิน 3 ชิ้น ไม่งั้นจะไม่มีทางมาตกเงื่อนไขตัวนี้เลย)
    • ถ้าซื้อเกิน 3 ชิ้น ลด 10%
    • นอกนั้น ลด 0%

    IF ซ้อนกัน

    โดยที่ผมจะขอเริ่มจากตัวที่เป็นพื้นฐานที่ใช้ได้ทุก version นั่นก็คือ IF ซ้อนกัน ซึ่งวิธีทำก็คือใส่ IF ลงไปอีกชุดนึงเลยในส่วนที่เป็น value_if_true หรือ value_if_false ก็ได้ (หรือทั้งคู่ก็ได้)

    สอนใช้ฟังก์ชัน IF และผองเพื่อน (IFS, SWITCH) 5

    ซึ่งถ้าเขียนเป็นโครงสร้างสูตร จะเป็นดังนี้

    =IF(logical_test1,value_if_true1,IF(logical_test2,value_if_true2,value_if_false2))

    ถ้าใช้กับโจทย์ที่ให้ไปก็จะเป็นแบบนี้

    =IF(AND([@จำนวนชิ้น]>=5,[@วิธีการชำระเงิน]="เงินสด"),0.15,IF([@จำนวนชิ้น]>3,0.1,0))

    ซึ่งสูตรข้างบน สามารถใช้ IFS แทนได้ ก็จะไม่ต้องใช้หลายฟังก์ชันซ้อนกัน

    IFS

    สามารถใช้ฟังก์ชัน IFS ตัวเดียว แล้วเขียนเงื่อนไขคู่ไปกับ value_if_true ไปได้เรื่อยๆ ทีละคู่ได้เลย

    ifs
    =IFS(logical_test1,value_if_true1,logical_test2,value_if_true2,...)

    ซึ่งถ้าอยากจะแสดงค่ากรณีที่ไม่ตรงกับเงื่อนไขใดๆ เลย สามารถใช้ TRUE มาช่วยได้ตอนจบดังนี้

    ifs
    =IFS(logical_test1,value_if_true1,logical_test2,value_if_true2,TRUE(),value_else)

    ถ้าใช้กับโจทย์ข้างบนจะเป็นแบบนี้

    =IFS(AND([@จำนวนชิ้น]>=5,[@วิธีการชำระเงิน]="เงินสด"),0.15,[@จำนวนชิ้น]>3,0.1,TRUE,0)

    ลองดูตัวอย่างอื่นๆ ได้จากคลิปนี้

    SWITCH

    ถ้าเราไม่มี IFS ให้ใช้ แต่มี SWITCH ก็สามารถใช้ได้เหมือนกัน (เช่นใน DAX จะ ไม่มี IFS แต่มี SWITCH)

    ตามปกติแล้ว SWITCH คือจะคล้ายๆ กับ CHOOSE คือเลือกว่า ถ้าค่าที่เราสนใจเป็นแบบนี้ๆ จะทำอะไร แต่ SWITCH ดีกว่า CHOOSE ตรงที่ว่าค่าที่สนใจสามารถเป็นอะไรก็ได้ ในขณะที่ CHOOSE ค่าที่สนใจต้องเป็นตัวเลข 1,2,3,4,… ไปเรื่อยๆ เท่านั้น

    switch
    =SWITCH(expression,value1,result1,value2,result2,...,default)

    แต่ถ้าเรานำ SWITCH มาพลิกแพลงโดยใส่ TRUE ลงไปใน expression หรือค่าที่จะเช็ค มันจะทำตัวแบบ IFS ได้เลย เพราะเมื่อไหร่ที่ value เป็นจริง มันจะแสดง result ของ value นั้นทันที ดังนี้

    switch
    =SWITCH(TRUE(),logical_test1,value_if_true1,logical_test2,value_if_true2,value_else)

    ถ้าใช้กับโจทย์ข้างบนจะเป็นแบบนี้

    =SWITCH(TRUE,AND([@จำนวนชิ้น]>=5,[@วิธีการชำระเงิน]="เงินสด"),0.15,[@จำนวนชิ้น]>3,0.1,0)

    จบแล้ว

    เช่นเคย ใครอ่านแล้วสงสัยอะไรตรงไหนก็ถามได้เลยนะครับ หากชอบก็ฝากแชร์ให้เพื่อนๆ ด้วยนะ ^^