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

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

บทความนี้จะพาคุณลึกเข้าไปใน “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 เร็วขึ้น 2
สูตรพฤติกรรมคำนวณผลลัพธ์ (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 ก็ช่วยลดเวลาไปได้ครึ่งหนึ่ง!

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

Leave a Reply

Your email address will not be published. Required fields are marked *