Thep Excel

SWITCHฟังก์ชันเลือกค่าตามเงื่อนไขหลายทาง

SWITCH ประเมินนิพจน์หรือค่าหนึ่งค่า แล้วเปรียบเทียบกับรายการค่าที่กำหนดตามลำดับ เมื่อพบค่าที่ตรงกันจะส่งคืนผลลัพธ์ที่เชื่อมโยงทันที หากไม่ตรงกับค่าใดเลยสามารถกำหนด default value ได้ เหมาะสำหรับแทนที่ nested IF หลายชั้นด้วยไวยากรณ์ที่อ่านง่ายกว่ามาก

fx
=SWITCH(expression, value1, result1, [value2], [result2], [default])

ความนิยม9/10
ความยาก5/10
ประโยชน์10/10

อัปเดต 30 November 2025

Syntax & Arguments

อาร์กิวเมนต์ ชนิด ค่าเริ่มต้น คำอธิบาย
expression Any ค่าหรือนิพจน์ที่ต้องการประเมินและเปรียบเทียบกับรายการค่า สามารถเป็นตัวเลข ข้อความ วันที่ ค่าลอจิก หรือผลลัพธ์จากฟังก์ชันอื่น เช่น A1, WEEKDAY(B1), หรือ TRUE
value1 Any ค่าตัวเลือกแรกที่จะนำมาเปรียบเทียบกับ expression หาก expression ตรงกับ value1 ฟังก์ชันจะส่งคืน result1 ทันที
result1 Any ผลลัพธ์ที่จะส่งคืนเมื่อ expression ตรงกับ value1 สามารถเป็นค่าคงที่ การอ้างอิงเซลล์ หรือสูตรคำนวณ
[value2]ไม่บังคับ Any ค่าตัวเลือกที่ 2 ที่จะนำมาเปรียบเทียบกับ expression สามารถระบุคู่ value-result เพิ่มเติมได้สูงสุด 126 คู่
[result2]ไม่บังคับ Any ผลลัพธ์ที่จะส่งคืนเมื่อ expression ตรงกับ value2 ฟังก์ชันจะตรวจสอบตามลำดับจนกว่าจะพบค่าที่ตรงกัน
[default]ไม่บังคับ Any #N/A error ค่าที่จะส่งคืนเมื่อ expression ไม่ตรงกับค่าใดเลยในรายการ ถ้าไม่ระบุและไม่มีค่าตรงกัน ฟังก์ชันจะส่งคืน #N/A error แนะนำให้ระบุ default เสมอเพื่อป้องกัน error

[ ] = อาร์กิวเมนต์ที่ไม่บังคับ

Additional Notes

เคยเขียน nested IF ซ้อนกันหลายชั้นจนงงเองมั้ยครับ? 😅

.

SWITCH เป็นฟังก์ชันที่ Microsoft สร้างมาเพื่อแก้ปัญหานี้โดยเฉพาะ มันทำงานแบบง่ายๆ คือ รับค่าหนึ่งค่า แล้วเปรียบเทียบกับรายการตัวเลือกที่เราตั้งไว้ เมื่อเจอค่าที่ตรงกันตัวแรก ก็ส่งผลลัพธ์ที่เชื่อมโยงกับค่านั้นกลับมาทันที 💡

.

ข้อดีสำคัญคือ ไวยากรณ์อ่านง่ายกว่า nested IF มาก และแก้ไขได้ง่ายกว่าด้วย ส่วนตัวผมชอบใช้ตอนต้องแปลงรหัสสถานะต่างๆ ให้เป็นข้อความที่อ่านเข้าใจง่ายครับ เช่น P → Pending, C → Completed แบบนี้ 😎

จุดเด่นของ SWITCH

  • อ่านง่ายกว่า nested IF – กำหนดค่าที่ต้องการตรวจสอบเพียงครั้งเดียวแทนที่จะซ้ำในทุกเงื่อนไข
  • รองรับได้สูงสุด 126 คู่ – สามารถระบุค่า-ผลลัพธ์ได้ถึง 126 คู่ในฟังก์ชันเดียว
  • มี default value – สามารถกำหนดค่าเริ่มต้นสำหรับกรณีที่ไม่ตรงกับค่าใดๆ ป้องกัน #N/A error
  • ทำงานกับหลายประเภทข้อมูล – รองรับทั้งตัวเลข ข้อความ วันที่ และค่าลอจิก

ใช้งานเมื่อไหร่

SWITCH เหมาะสำหรับงานที่ต้องการ exact matching เช่น:

  • แปลงรหัสสถานะเป็นข้อความที่อ่านเข้าใจได้ (P → Pending, C → Completed)
  • แปลงตัวเลขวันในสัปดาห์เป็นชื่อวัน (1 → อาทิตย์, 2 → จันทร์)
  • กำหนดส่วนลดหรืออัตราตามหมวดหมู่สินค้า
  • เลือกการคำนวณหรือเงื่อนไขตามโหมดที่ผู้ใช้เลือก
  • สร้าง lookup table แบบง่ายภายในสูตรโดยไม่ต้องใช้ตารางช่วย

SWITCH vs Nested IF vs IFS

คุณสมบัติ SWITCH Nested IF IFS
ประเภทเงื่อนไข เท่ากับเท่านั้น (=) ทุกประเภท ทุกประเภท
Default value มี (อาร์กิวเมนต์สุดท้าย) มี (ELSE) ไม่มี
ความอ่านง่าย ดีมาก แย่เมื่อซ้อนเยอะ ดี
Short-circuit ไม่ (ประเมินทุก expression) ใช่ ใช่
Excel version 2019+ ทุกเวอร์ชัน 2019+

ข้อควรระวัง: SWITCH จะประเมินทุก expression ในสูตร แม้กระทั่งส่วนที่ไม่ถูกใช้งาน ถ้าคุณมีการคำนวณที่ซับซ้อนหรือใช้เวลานาน และต้องการ short-circuit evaluation ควรใช้ nested IF แทน

เทคนิค SWITCH(TRUE, …) Pattern

แม้ SWITCH จะออกแบบมาสำหรับ exact matching แต่คุณสามารถใช้เทคนิค SWITCH(TRUE, condition1, result1, condition2, result2, ...) เพื่อสร้างเงื่อนไขแบบช่วงค่าได้ คล้ายกับ IFS แต่มี default value

=SWITCH(TRUE,
  Score>=90, "A",
  Score>=80, "B",
  Score>=70, "C",
  Score>=60, "D",
  TRUE, "F"
)

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

ข้อจำกัดที่ควรทราบ

  • ไม่มีใน Excel 2016 ขึ้นไปก่อนหน้า – ต้องใช้ Excel 2019 หรือ Microsoft 365 เท่านั้น
  • ไม่รองรับ wildcard – ไม่สามารถใช้ * หรือ ? ในการจับคู่แบบ pattern ได้
  • Sequential matching เท่านั้น – หยุดที่ค่าตรงกันตัวแรก ไม่มีการตรวจสอบต่อ
  • Case-sensitive สำหรับข้อความ – “A” และ “a” ถือเป็นค่าคนละตัว

How it works

แปลงรหัสเป็นข้อความที่อ่านเข้าใจได้

แมปรหัสสถานะ เกรด หมวดหมู่ หรือโค้ดต่างๆ ให้เป็นข้อความที่ผู้ใช้อ่านเข้าใจได้ง่าย เช่น P → Pending, C → Completed, X → Cancelled

คำนวณส่วนลดหรืออัตราตามหมวดหมู่

กำหนดเปอร์เซ็นต์ส่วนลด อัตราดอกเบี้ย หรือค่าคอมมิชชั่นที่แตกต่างกันตามประเภทสินค้า ระดับลูกค้า หรือช่องทางการขาย

สร้างป้ายกำกับรายงานแบบไดนามิก

สร้าง label สำหรับรายงาน dashboard หรือ chart ที่เปลี่ยนแปลงตามค่าที่คำนวณได้ เช่น Performance: Poor/Average/Good/Excellent

เลือกโหมดการคำนวณ

เปลี่ยนวิธีการคำนวณตามโหมดหรือเงื่อนไขที่ผู้ใช้เลือก เช่น คำนวณภาษีแบบต่างๆ หรือใช้สูตรการตั้งราคาที่แตกต่างกัน

แปลงค่าตัวเลขเป็นคำอธิบาย

แปลง numeric codes จากระบบอื่นให้เป็นข้อความที่มีความหมาย เช่น error codes, priority levels, หรือ status indicators

Examples

ตัวอย่างที่ 1: พื้นฐาน – แปลงรหัสไซส์เป็นชื่อSWITCH("M", "S", "Small", "M", "Medium", "L", "Large", "Unknown")

**สถานการณ์:** คุณมีรหัสไซส์สินค้าเป็นตัวอักษร S, M, L และต้องการแปลงเป็นชื่อเต็ม

**วิธีทำงาน:**
– expression คือ "M"
– SWITCH เปรียบเทียบ "M" กับ value1="S" → ไม่ตรง
– เปรียบเทียบกับ value2="M" → ตรงกัน 😎
– ส่งคืน result2="Medium" ทันที ไม่ตรวจสอบ value ต่อไป
– ค่า "Unknown" เป็น default สำหรับกรณีที่ไม่ตรงกับ S, M, L ใดเลย

**กรณีใช้งานจริง:** เมื่อ expression เป็นเซลล์ เช่น =SWITCH(A2, "S", "Small", "M", "Medium", "L", "Large", "Unknown") จะแปลงรหัสใน A2 เป็นชื่อไซส์

fx
=SWITCH("M", "S", "Small", "M", "Medium", "L", "Large", "Unknown")

ผลลัพธ์Medium
ตัวอย่างที่ 2: แปลงเลขวันเป็นชื่อวัน (ไม่มี default)SWITCH(3, 1, "อาทิตย์", 2, "จันทร์", 3, "อังคาร", 4, "พุธ", 5, "พฤหัสบดี", 6, "ศุกร์", 7, "เสาร์")

**สถานการณ์:** แปลงเลขวันในสัปดาห์ (1-7) ที่ได้จากฟังก์ชัน WEEKDAY เป็นชื่อวันภาษาไทย

**วิธีทำงาน:**
– expression = 3 (เลขแทนวันอังคาร)
– SWITCH เปรียบเทียบ 3 กับ value1=1 → ไม่ตรง
– เปรียบเทียบกับ value2=2 → ไม่ตรง
– เปรียบเทียบกับ value3=3 → ตรงกัน 👉
– ส่งคืน "อังคาร" ทันที
– ไม่มี default เพราะเลขวันต้องอยู่ในช่วง 1-7 เท่านั้น

**กรณีใช้งานจริง:** =SWITCH(WEEKDAY(A2), 1, "อาทิตย์", 2, "จันทร์", 3, "อังคาร", 4, "พุธ", 5, "พฤหัสบดี", 6, "ศุกร์", 7, "เสาร์")

**หมายเหตุ:** WEEKDAY ส่งคืนเลข 1-7 เสมอ จึงไม่จำเป็นต้องมี default แต่ถ้ามีข้อมูลผิดพลาด แนะนำเพิ่ม default เป็น "ไม่ระบุ" นะครับ

fx
=SWITCH(3, 1, "อาทิตย์", 2, "จันทร์", 3, "อังคาร", 4, "พุธ", 5, "พฤหัสบดี", 6, "ศุกร์", 7, "เสาร์")

ผลลัพธ์อังคาร
ตัวอย่างที่ 3: การคำนวณส่วนลดตามหมวดหมู่สินค้า100 * SWITCH("Electronics", "Electronics", 0.9, "Clothing", 0.8, "Home Goods", 0.85, 1)

**สถานการณ์ธุรกิจ:** ร้านค้าต้องการคำนวณราคาหลังหักส่วนลดตามหมวดหมู่สินค้า สมมติราคาต้นทุน 100 บาท
– Electronics: ส่วนลด 10% (คูณ 0.9)
– Clothing: ส่วนลด 20% (คูณ 0.8)
– Home Goods: ส่วนลด 15% (คูณ 0.85)
– หมวดหมู่อื่นๆ: ไม่มีส่วนลด (คูณ 1)

**วิธีทำงาน:**
– expression = "Electronics"
– SWITCH หา multiplier ที่ตรงกับหมวดหมู่ → 0.9
– คำนวณ 100 * 0.9 = 90

**กรณีใช้งานจริง:** =B2 * SWITCH(A2, "Electronics", 0.9, "Clothing", 0.8, "Home Goods", 0.85, 1)
– A2: หมวดหมู่สินค้า
– B2: ราคาต้นทุน
– ผลลัพธ์: ราคาหลังคำนวณส่วนลด

💡 **จุดเด่น:** result ไม่จำเป็นต้องเป็นข้อความ สามารถเป็นตัวเลขหรือสูตรคำนวณได้นะครับ

fx
=100 * SWITCH("Electronics", "Electronics", 0.9, "Clothing", 0.8, "Home Goods", 0.85, 1)

ผลลัพธ์90
ตัวอย่างที่ 4: ไม่มี default เมื่อไม่ตรงกับค่าใด (ได้ #N/A error)SWITCH("Z", "A", "Excellent", "B", "Good", "C", "Average")

**สถานการณ์:** ตรวจสอบเกรด แต่ลืมใส่ default value 😅

**ปัญหาที่เกิด:**
– expression = "Z" (เกรดที่ไม่มีในระบบ)
– SWITCH เปรียบเทียบ "Z" กับ "A" → ไม่ตรง
– เปรียบเทียบกับ "B" → ไม่ตรง
– เปรียบเทียบกับ "C" → ไม่ตรง
– ไม่มี default value → ส่งคืน #N/A error 😭

**วิธีแก้ไข:** เพิ่ม default value ที่ท้ายสุด
=SWITCH("Z", "A", "Excellent", "B", "Good", "C", "Average", "Invalid Grade")

💡 **Best Practice:** ส่วนตัวผมแนะนำให้ระบุ default เสมอนะครับ เพื่อป้องกัน error จากข้อมูลที่ไม่คาดคิด หรือใช้ IFERROR ครอบเพื่อจัดการ error
=IFERROR(SWITCH(A2, "A", "Excellent", "B", "Good", "C", "Average"), "Unknown")

fx
=SWITCH("Z", "A", "Excellent", "B", "Good", "C", "Average")

ผลลัพธ์#N/A
ตัวอย่างที่ 5: เทคนิค TRUE Pattern สำหรับเงื่อนไขแบบช่วงค่าSWITCH(TRUE, 75>=90, "A", 75>=80, "B", 75>=70, "C", 75>=60, "D", TRUE, "F")

**สถานการณ์:** คำนวณเกรดตามคะแนน แต่ SWITCH ทำงานกับ exact matching เท่านั้น วิธีแก้คือใช้ TRUE pattern

**เทคนิค TRUE Pattern:**
– ตั้ง expression = TRUE
– แทนที่ value ด้วย condition (เงื่อนไขที่ส่งคืน TRUE/FALSE)
– SWITCH จะหา condition แรกที่เป็น TRUE แล้วส่งคืน result นั้น

**วิธีทำงาน:**
– expression = TRUE
– ตรวจสอบ condition1: 75>=90 → FALSE ไม่ตรง
– ตรวจสอบ condition2: 75>=80 → FALSE ไม่ตรง
– ตรวจสอบ condition3: 75>=70 → TRUE ตรงกัน
– ส่งคืน "C" ทันที
– TRUE ที่ท้ายสุดทำหน้าที่เป็น default (TRUE ตรงกับ TRUE เสมอ)

**กรณีใช้งานจริง:**
=SWITCH(TRUE, A2>=90, "A", A2>=80, "B", A2>=70, "C", A2>=60, "D", TRUE, "F")

**ข้อควรระวัง:** แม้เทคนิคนี้จะใช้งานได้ แต่ SWITCH จะประเมินทุก condition แม้หาคำตอบแล้ว ทำให้ช้ากว่า nested IF หรือ IFS ในกรณีที่มีการคำนวณซับซ้อน

**ทางเลือกที่ดีกว่า:** ใช้ IFS แทนสำหรับ range-based conditions
=IFS(A2>=90, "A", A2>=80, "B", A2>=70, "C", A2>=60, "D", TRUE, "F")

fx
=SWITCH(TRUE, 75>=90, "A", 75>=80, "B", 75>=70, "C", 75>=60, "D", TRUE, "F")

ผลลัพธ์C
ตัวอย่างที่ 6: แปลงสถานะโครงการพร้อมจัดการข้อมูลผิดพลาดSWITCH("P", "P", "⏳ Pending", "I", "🔄 In Progress", "R", "👀 Under Review", "C", "✅ Completed", "X", "❌ Cancelled", "⚠️ Invalid Status")

**สถานการณ์ธุรกิจจริง:** ระบบ project management ใช้รหัสตัวอักษรเดียว (P, I, R, C, X) เก็บสถานะ แต่ต้องการแสดงข้อความและไอคอนที่เข้าใจง่ายในรายงาน

**Status Codes:**
– P = Pending (รอดำเนินการ)
– I = In Progress (กำลังทำ)
– R = Under Review (รอตรวจสอบ)
– C = Completed (เสร็จสมบูรณ์)
– X = Cancelled (ยกเลิก)

**วิธีทำงาน:**
– expression = "P"
– SWITCH จับคู่ "P" กับ value1="P" → ตรงกัน
– ส่งคืน "⏳ Pending" พร้อมไอคอนนาฬิกาทราย
– default = "⚠️ Invalid Status" สำหรับกรณีข้อมูล corrupt หรือผิดพลาด

**กรณีใช้งานจริง:** =SWITCH(A2, "P", "⏳ Pending", "I", "🔄 In Progress", "R", "👀 Under Review", "C", "✅ Completed", "X", "❌ Cancelled", "⚠️ Invalid Status")
– A2: เซลล์ที่มีรหัสสถานะ
– ผลลัพธ์: ข้อความพร้อมไอคอนที่อ่านง่าย

**ประโยชน์:**
– Dashboard อ่านง่าย ไม่ต้องจำรหัส
– ไอคอนช่วยให้มองเห็นสถานะได้ทันที
– Default ป้องกัน error จากข้อมูลผิดปกติ
– ง่ายต่อการบำรุงรักษามากกว่า nested IF 5 ชั้น

fx
=SWITCH("P", "P", "⏳ Pending", "I", "🔄 In Progress", "R", "👀 Under Review", "C", "✅ Completed", "X", "❌ Cancelled", "⚠️ Invalid Status")

ผลลัพธ์⏳ Pending
ตัวอย่างที่ 7: คำนวณค่าคอมมิชชั่นแบบซับซ้อนตามระดับพนักงาน50000 * SWITCH("Manager", "Junior", 0.05, "Senior", 0.08, "Manager", 0.12, "Director", 0.15, 0.03)

**สถานการณ์ธุรกิจขั้นสูง:** บริษัทมีโครงสร้างค่าคอมมิชชั่นที่แตกต่างกันตามตำแหน่ง สมมติยอดขาย 50,000 บาท

**อัตราคอมมิชชั่นตามตำแหน่ง:**
– Junior: 5% (0.05)
– Senior: 8% (0.08)
– Manager: 12% (0.12)
– Director: 15% (0.15)
– พนักงานอื่นๆ: 3% (0.03) – default rate

**วิธีทำงาน:**
– expression = "Manager"
– SWITCH ค้นหาอัตราคอมมิชชั่น → 0.12 (12%)
– คำนวณ 50,000 * 0.12 = 6,000 บาท

**สูตรใช้งานจริงที่ซับซ้อนขึ้น:**
=B2 * SWITCH(C2, "Junior", 0.05, "Senior", 0.08, "Manager", IF(B2>=100000, 0.15, 0.12), "Director", 0.15, 0.03)
– B2: ยอดขาย
– C2: ตำแหน่งพนักงาน
– Manager ได้ 12% ปกติ แต่ถ้ายอดขายเกิน 100,000 จะได้ 15%

**การขยายผล – รวมกับ IFS สำหรับ tiered commission:**
=SWITCH(C2,
"Manager", IFS(B2>=100000, B2*0.15, B2>=50000, B2*0.12, TRUE, B2*0.08),
"Director", B2*0.15,
B2*0.05
)

**จุดเด่น:**
– ผสมผสาน SWITCH (เลือกตามตำแหน่ง) กับ IF/IFS (เงื่อนไขภายในแต่ละตำแหน่ง)
– result สามารถเป็นฟังก์ชันซับซ้อนได้ ไม่จำเป็นต้องเป็นค่าคงที่
– อ่านง่ายและบำรุงรักษาได้ดีกว่า nested IF ที่มี 10+ เงื่อนไข

fx
=50000 * SWITCH("Manager", "Junior", 0.05, "Senior", 0.08, "Manager", 0.12, "Director", 0.15, 0.03)

ผลลัพธ์6000
ตัวอย่างที่ 8: สร้าง Dynamic Chart Label ด้วย Performance IndicatorSWITCH(TRUE, (B2-C2)/C2 >= 0.2, "📈 Outstanding (+" & TEXT((B2-C2)/C2, "0%") & ")", (B2-C2)/C2 >= 0.05, "✅ Above Target (+" & TEXT((B2-C2)/C2, "0%") & ")", (B2-C…

**สถานการณ์ธุรกิจขั้นสูง:** สร้าง performance dashboard ที่แสดงผลการเปรียบเทียบยอดขายจริง (B2) กับเป้าหมาย (C2) แบบ dynamic พร้อมไอคอนและเปอร์เซ็นต์ที่คำนวณ

**Performance Tiers:**
– Outstanding: เกินเป้า 20% ขึ้นไป → 📈 พร้อม % ที่เกิน
– Above Target: เกินเป้า 5-20% → ✅ พร้อม % ที่เกิน
– On Track: ± 5% จากเป้า → ➡️ ไม่แสดง %
– Below Target: ต่ำกว่าเป้า 5-20% → ⚠️ พร้อม % ติดลบ
– Critical: ต่ำกว่าเป้า 20%+ → 🚨 พร้อม % ติดลบ

**ตัวอย่างการคำนวณ (B2=57,500, C2=50,000):**
– คำนวณเปอร์เซ็นต์: (57,500 – 50,000) / 50,000 = 0.15 (15%)
– เช็คเงื่อนไข: 0.15 >= 0.2 → FALSE
– เช็คเงื่อนไข: 0.15 >= 0.05 → TRUE ✅
– ส่งคืน: "✅ Above Target (+15%)"
– TEXT((B2-C2)/C2, "0%") จัดรูปแบบเลขทศนิยมเป็น %

**เทคนิคขั้นสูง:**
1. **TRUE Pattern** – ใช้ SWITCH(TRUE, …) เพื่อประเมินช่วงค่า
2. **Nested Calculation** – คำนวณ (B2-C2)/C2 ซ้ำในแต่ละ condition
3. **Dynamic Text** – ใช้ & และ TEXT() สร้างข้อความที่เปลี่ยนตามข้อมูล
4. **Conditional Formatting** – ไอคอนเปลี่ยนตามระดับ performance

**วิธีปรับปรุงประสิทธิภาพด้วย LET:**
=LET(
variance, (B2-C2)/C2,
varText, TEXT(variance, "0%"),
SWITCH(TRUE,
variance >= 0.2, "📈 Outstanding (+" & varText & ")",
variance >= 0.05, "✅ Above Target (+" & varText & ")",
variance >= -0.05, "➡️ On Track",
variance >= -0.2, "⚠️ Below Target (" & varText & ")",
TRUE, "🚨 Critical (" & varText & ")"
)
)
– คำนวณ variance แค่ครั้งเดียว แล้วใช้ซ้ำ
– ลด calculation overhead
– อ่านง่ายและบำรุงรักษาได้ดีขึ้น

**การใช้งานใน Dashboard:**
– ใช้เป็น label ใน chart
– แสดงใน conditional formatting
– สร้าง KPI card ที่อัพเดทอัตโนมัติ
– รองรับการวิเคราะห์แบบ real-time

**ข้อดี:**
– Visual impact สูง (ไอคอนช่วยมองเห็นทันที)
– ข้อมูลครบถ้วน (มีทั้งสถานะและตัวเลข)
– ปรับแต่งได้ง่าย (เปลี่ยน threshold หรือข้อความได้ทันที)
– ใช้สูตรเดียวแทนหลายคอลัมน์

fx
=SWITCH(TRUE, (B2-C2)/C2 >= 0.2, "📈 Outstanding (+" & TEXT((B2-C2)/C2, "0%") & ")", (B2-C2)/C2 >= 0.05, "✅ Above Target (+" & TEXT((B2-C2)/C2, "0%") & ")", (B2-C2)/C2 >= -0.05, "➡️ On Track", (B2-C2)/C2 >= -0.2, "⚠️ Below Target (" & TEXT((B2-C2)/C2, "0%") & ")", TRUE, "🚨 Critical (" & TEXT((B2-C2)/C2, "0%") & ")")

ผลลัพธ์✅ Above Target (+15%)

FAQs

SWITCH ต่างจาก IFS อย่างไร ควรใช้ตัวไหน?+

SWITCH ใช้การเปรียบเทียบแบบ exact matching (เท่ากับพอดี) เหมาะกับการแมปค่าคงที่ เช่น รหัส → ข้อความ และมี default value ในตัว

ส่วน IFS ใช้เงื่อนไขทุกแบบ (>, =, =90, >=80, >=70 หรือเงื่อนไขที่หลากหลาย

ถ้าไม่ใส่ default value จะเกิดอะไรขึ้น?+

ถ้า expression ไม่ตรงกับ value ใดเลย และไม่มี default ฟังก์ชันจะส่งคืน #N/A error 😭 ซึ่งอาจทำให้สูตรอื่นที่อ้างอิงเซลล์นี้เกิด error ตามไปด้วย

💡 **Best Practice:** ส่วนตัวผมแนะนำให้ระบุ default value เสมอครับ แม้จะคิดว่าครอบคลุมทุกกรณีแล้ว เพื่อรองรับข้อมูลผิดพลาดหรือกรณีที่ไม่คาดคิด เช่น:
– ใช้ "Unknown", "Invalid", "N/A" เป็น default text
– ใช้ 0 หรือ "" (empty string) เป็น default value
– ใช้ IFERROR ครอบสูตรเพื่อจัดการ error: =IFERROR(SWITCH(…), "Error")

SWITCH รองรับกี่คู่ value-result ได้สูงสุด?+

SWITCH รองรับได้สูงสุด 126 คู่ value-result (252 arguments สำหรับ value และ result) บวก 1 expression และ 1 optional default รวมเป็น 254 arguments ซึ่งเพียงพอสำหรับการใช้งานส่วนใหญ่ครับ

**ข้อควรพิจารณา:**
– ถ้ามีตัวเลือกมากกว่า 20-30 คู่ ส่วนตัวผมแนะนำให้ใช้ lookup table (VLOOKUP/XLOOKUP) แทนนะครับ เพื่อความอ่านง่ายและบำรุงรักษา
– สูตรที่ยาวเกินไปอาจทำให้คำนวณช้าและแก้ไขยาก 😅
– แนะนำจัดการข้อมูลแมปในตารางแยก แล้วใช้ lookup function อ้างอิงแทน

เทคนิค SWITCH(TRUE, …) ทำงานอย่างไร และควรใช้เมื่อไหร่?+

SWITCH(TRUE, condition1, result1, condition2, result2, …) เป็นเทคนิคที่ใช้ TRUE เป็น expression แล้วแทนที่ value ด้วยเงื่อนไข (conditions) ที่ส่งคืน TRUE/FALSE ทำให้ SWITCH สามารถทำงานกับ range-based conditions ได้คล้าย IFS

**วิธีทำงาน:** SWITCH จะตรวจสอบแต่ละ condition ตามลำดับ เมื่อพบ condition ที่เป็น TRUE (ตรงกับ expression=TRUE) จะส่งคืน result นั้นทันที

**ควรใช้เมื่อไหร่:**
– ต้องการ range-based conditions แต่ต้องการ default value (ซึ่ง IFS ไม่มี)
– มีเงื่อนไขไม่เกิน 5-7 condition (ถ้าเยอะกว่านี้ใช้ IFS ดีกว่า)

**ข้อเสียที่ควรระวัง:**
– SWITCH ไม่มี short-circuit evaluation จะประเมินทุก condition แม้พบคำตอบแล้ว ทำให้ช้ากว่า nested IF หรือ IFS
– ถ้ามี calculation ซับซ้อนใน condition แนะนำใช้ nested IF หรือ IFS แทน
– ไวยากรณ์อาจทำให้สับสนได้ เพราะไม่ได้ออกแบบมาสำหรับจุดประสงค์นี้

SWITCH รองรับ Excel เวอร์ชันไหนบ้าง?+

SWITCH รองรับเฉพาะ:
– **Excel 2019** (perpetual license)
– **Microsoft 365** (subscription version)
– **Excel Online**
– **Excel for Mac 2019 ขึ้นไป**

ไม่รองรับ Excel 2016, 2013, 2010 หรือเวอร์ชันเก่ากว่า

**ทางเลือกสำหรับ backward compatibility:**
– ใช้ nested IF statements: =IF(A1="P", "Pending", IF(A1="C", "Completed", "Other"))
– ใช้ CHOOSE ร่วมกับ MATCH: =CHOOSE(MATCH(A1, {"P","C","X"}, 0), "Pending", "Completed", "Cancelled")
– สร้าง lookup table แยก แล้วใช้ VLOOKUP หรือ INDEX-MATCH

**หมายเหตุ:** ถ้าไฟล์ต้องแชร์กับคนที่ใช้ Excel รุ่นเก่า ไฟล์จะเปิดได้แต่สูตร SWITCH จะแสดง #NAME? error

SWITCH เร็วกว่า nested IF จริงหรือไม่?+

**คำตอบสั้น:** ไม่จริงเสมอไป ขึ้นอยู่กับสถานการณ์

**ข้อดีของ SWITCH:**
– **ไวยากรณ์สั้นและอ่านง่าย** – สูตรกระชับกว่า nested IF มาก
– **บำรุงรักษาได้ง่าย** – แก้ไขหรือเพิ่มเงื่อนไขใหม่ทำได้ง่าย
– **Performance ใกล้เคียงกัน** สำหรับการ exact matching ง่ายๆ

**ข้อเสียของ SWITCH ด้าน Performance:**
– **ไม่มี short-circuit evaluation** – Excel ประเมินทุก expression ในสูตร แม้กระทั่งส่วนที่ไม่ได้ใช้
– **ช้ากว่า nested IF** เมื่อมี calculation ซับซ้อนใน result หรือใช้ SWITCH(TRUE, …)
– **อาจเกิด recursion issues** ในกรณีใช้กับ LAMBDA แบบ recursive

**Nested IF มี short-circuit:**
=IF(A1="P", expensive_calc1(), IF(A1="C", expensive_calc2(), expensive_calc3()))
– เมื่อ A1="P" จะคำนวณแค่ expensive_calc1() ไม่ทำ calc2 และ calc3

**SWITCH ไม่มี short-circuit:**
=SWITCH(A1, "P", expensive_calc1(), "C", expensive_calc2(), expensive_calc3())
– Excel คำนวณทั้ง calc1(), calc2(), และ calc3() ทุกครั้ง แม้ผลลัพธ์จะใช้แค่ตัวเดียว

**คำแนะนำ:**
– ถ้า result เป็นค่าคงที่หรือการอ้างอิงเซลล์ธรรมดา → ใช้ SWITCH เพื่อความอ่านง่าย
– ถ้ามี calculation ซับซ้อนหรือ performance-critical → ใช้ nested IF หรือ IFS
– ถ้าต้องการทั้งความอ่านง่ายและ performance → ใช้ LET ร่วมกับ SWITCH เพื่อคำนวณล่วงหน้า

Resources & Related

ฟังก์ชันที่ผู้เขียนโยงไว้กับ SWITCH จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง

ฟังก์ชันนี้SWITCHLogical
Logical (5)
IF

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

IFERROR

IFERROR ช่วยดักจับ Error ทุกประเภทที่เกิดขึ้นในสูตร (#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!) แล้วเปลี่ยนเป็นค่าที่เราต้องการแทน
.
ที่เจ๋งคือมันช่วยให้รายงานและ Dashboard ดูสะอาด ไม่มี Error แสดงให้ผู้ใช้งานเห็น โดยถ้าสูตรไม่มี Error ก็จะ return ผลลัพธ์ปกติ
.
ส่วนตัวผมคิดว่าฟังก์ชันนี้เป็น "ตัวช่วยมหาเทพ" สำหรับคนทำรายงานเลยครับ 😎

IFS

IFS ทดสอบหลายเงื่อนไขตามลำดับที่กำหนด และคืนค่าของเงื่อนไขแรกที่เป็น TRUE แล้วหยุดทำงานทันที โครงสร้างเป็นคู่ (เงื่อนไข, ผลลัพธ์) ซ้ำได้สูงสุด 127 คู่ ทำให้อ่านและเขียนง่ายกว่า Nested IF แบบซ้อนชั้น ควรใส่ TRUE เป็นเงื่อนไขสุดท้ายเพื่อกำหนดค่า default ป้องกัน #N/A error มีตั้งแต่ Excel 2019 และ Microsoft 365 เท่านั้น

LAMBDA

LAMBDA สร้าง custom function ที่ใช้ซ้ำได้โดยไม่ต้องเขียน VBA กำหนด parameter และ calculation แล้วบันทึกผ่าน Name Manager (Ctrl+F3) ด้วยชื่อที่จดจำง่าย เรียกใช้เหมือนฟังก์ชันมาตรฐาน สูตรอยู่ที่เดียว แก้ไขที่เดียวมีผลทั้ง workbook ใช้ร่วมกับ helper functions (MAP, REDUCE, SCAN, BYROW, BYCOL, MAKEARRAY) สร้างสูตร dynamic array ขั้นสูงได้ รองรับ recursive LAMBDA เรียกตัวเองซ้ำจนถึงเงื่อนไข แทนที่สูตรยาวๆ ด้วย custom function ที่อ่านง่าย

LET

LET ช่วยให้คุณกำหนดชื่อตัวแปร (Named Variables) ภายในสูตร Excel เพื่อเก็บค่าหรือผลลัพธ์การคำนวณ จากนั้นนำชื่อเหล่านั้นมาใช้ซ้ำในสูตรเดียวกัน
.
ทำให้สูตรที่ซับซ้อนอ่านง่ายขึ้นเยอะ ลดข้อผิดพลาดจากการเขียนซ้ำ และเพิ่มความเร็วเพราะแต่ละการคำนวณจะทำงานเพียงครั้งเดียว ไม่ว่าจะถูกอ้างอิงกี่ครั้งก็ตาม

Lookup and reference (1)
CHOOSE

CHOOSE เลือกค่าจากรายการค่าตามหมายเลขลำดับที่ระบุ เป็นเหมือนการเลือกรายการจากเมนู ส่งคืนค่าที่ตำแหน่งที่กำหนด มีประโยชน์ในการสร้างสูตรแบบเลือกตามเงื่อนไข

Comments

อีเมลของคุณจะไม่ถูกเผยแพร่