วันพุธที่ 21 ตุลาคม พ.ศ. 2552

เคล็ดการเขียนสูตร IF เกิน 7 ชั้น

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

แต่อย่างไรก็ตามจะขออธิบายวิธีการซ้อน IF มากกว่า 7 IF โดยสังเขป
จากข้อจำกัดของการใช้ฟังก์ชั่น IF ที่สามารถใช้เงื่อนไขได้ ไม่เกิน 7 IF (8 เงื่อนไข) คือใช้ IF 7 ครั้ง และเงื่อนไขที่ 8 ไม่ต้องใช้ IF


ใน MS.Office เวอร์ชั่น 2007 สามารถซ้อน IF ได้ถึง 64 IF
ส่วนรุ่นทั่วๆไปที่ยังใช้กันอยู่ คือรุ่น ไม่เกิน 2003 นั้น การจะทะลุขีดจำกัดการใช้ IF ที่มากกว่า 7 IF (8 เงื่อนไข) ก็สามารถทำได้ อาจจะมีหลายๆวิธี ในที่นี้จะขอแนะนำวิธีที่สามารถใช้ได้ดี วิธีหนึ่งดังนี้

เคล็ดการเขียนสูตร IF เกิน 7 ชั้น

1.ให้มองเงื่อนไขจากโจทย์ ออกเป็น 2 กรณี ที่แตกต่างกัน เพื่อการเขียนสูตรจะได้ถูกต้อง ชัดเจน และไม่สับสน
-แบบที่ 1เงื่อนไข จะมี แต่เครื่องหมาย =
-แบบที่ 2 เงื่อนไข จะมี เครื่องหมาย < หรือ > หรือ <= หรือ >= ผสมกันอยู่ในนั้น

2.ให้แยกเงื่อนไขออกเป็นชุดๆ ชุดละ 7 เงื่อนไข และเงื่อนไขที่เหลือจะเป็นของชุดสุดท้าย
เช่น มี 10 เงื่อนไข

-ชุดแรก จะเท่ากับ 7 เงื่อนไข ไม่ใช่ 8 เพราะวิธีนี้ เราจะให้เงื่อนไขที่ 8 เป็น "" (ค่าว่างหรือ Blank)
-ชุดหลังจะเหลือ 3 เงื่อนไข บวกด้วยเงื่อนไขที่เป็น "" อีก 1 เงื่อนไข

3.ให้เชื่อม เงื่อนไขแต่ละชุดเข้าด้วยกัน ด้วยเครื่องหมาย & ทั้งแบบที่ 1และแบบที่ 2

4. เงื่อนไขสุดท้ายของแต่ละชุดให้เป็น "" (ค่าว่าง หรือ Blank)…สำคัญมาก..ทั้งแบบที่ 1 และแบบที่ 2




ตัวอย่าง...เงื่อนไขมีอยู่ว่า
ถ้า 1 ให้เป็น One
ถ้า 2 ให้เป็น Two
ถ้า 3 ให้เป็น Three
ถ้า 4 ให้เป็น Four
ถ้า 5 ให้เป็น Five
ถ้า 6 ให้เป็น Six
ถ้า 7 ให้เป็น Seven
ถ้า 8 ให้เป็น Eight
ถ้า 9 ให้เป็น Nine
ถ้า 10 ให้เป็น Ten
ถ้า 11 ให้เป็น Eleven
ถ้า 12 ให้เป็น Twelve
ถ้า 13 ให้เป็น Thirteen


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











1.เงื่อนไขมี 13เงื่อนไข แยกเงื่อนไขออกเป็น 2 ชุด คือ ชุดแรก 7 เงื่อนไข ชุดหลังคือเงื่อนไขที่เหลือ

2.ชุดแรก เขียนเงื่อนไขได้ดังนี้ ..โดย เงื่อนไขสุดท้ายให้เป็น "" (ค่าว่าง หรือ Blank)
=IF(C11=1,"One",IF(C11=2,"Two",IF(C11=3,"Three",IF(C11=4,"Four",IF(C11=5,"Five",IF(C11=6,"Six",IF(C11=7,"Seven","")))))))

3.ชุดหลัง เขียนเงื่อนไขได้ดังนี้ .. โดย เงื่อนไขสุดท้ายให้เป็น "" (ค่าว่าง หรือ Blank)
=IF(C11=1,"One",IF(C11=2,"Two",IF(C11=3,"Three",IF(C11=4,"Four",IF(C11=5,"Five",IF(C11=6,"Six",IF(C11=7,"Seven","")))))))

4. ขั้นตอนสุดท้าย เชื่อมเงื่อนไขชุดแรกและชุดหลัง ด้วย เครื่องหมาย & จึงถือว่าเสร็จพิธี

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


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


เงื่อนไขคะแนนการสอบเป็นดังนี้
ต่ำกว่า 50 เกรด F
ต่ำกว่า 55 เกรด D
ต่ำกว่า 60 เกรด D+
ต่ำกว่า 65 เกรด C
ต่ำกว่า 70 เกรด C+
ต่ำกว่า 75 เกรด B
ต่ำกว่า 80 เกรด B+
ต่ำกว่า 85 เกรด A
ต่ำกว่า 90 เกรด A+
ตั้งแต่ 90 ขึ้นไป เกรด V


มี10 แยกเงื่อนไขออกเป็น 2 ชุด ชุดแรก 7 เงื่อนไข ชุดหลัง 3 เงื่อนไข


ดูภาพประกอบ คำอธิบาย



1.เงื่อนไขมี 10 ชุด แยกเงื่อนขออกเป็น 2 ชุด คือ ชุดแรก 7 เงื่อนไข ชุดหลัง 3 เงื่อนไข

2.ชุดแรก เขียนเงื่อนไขได้ดังนี้ .. เงื่อนไขสุดท้ายให้เป็น "" (ค่าว่าง หรือ Blank)
=IF(C11<50,"f",if(c11<55,"d",if(c11<60,"d+",if(c11<65,"c",if(c11<70,"c+",if(c11<75,"b",if(c11<80,"b+","")))))))


3.ชุดหลัง เขียนเงื่อนไขได้ดังนี้ .. เงื่อนไขสุดท้ายให้เป็น "" (ค่าว่าง หรือ Blank)
=IF(C11>=90,"V",IF(C11>=85,"A+",IF(C11>=80,"A","")))


4. ขั้นตอนสุดท้าย เชื่อมเงื่อนไขชุดแรกและชุดหลัง ด้วย เครื่องหมาย "&" จึงถือว่าเสร็จพิธี

5.ข้อนี้สำคัญคือ กรณีที่เงื่อนไข ไม่ได้ใช้เครื่องหมายเท่ากับเพียงอย่างเดียว อาจมีเงื่อนไข > (มากกว่า) < (น้อยกว่า) >= (มากกว่าหรือเท่ากับ) <= (น้อยกว่าหรือเท่ากับ) ให้เลือกใช้จะต้องทำดังนี้
ชุดแรกถ้าเราเลือกใช้เงื่อนไข น้อยที่สุด ไปหามากที่สุด (ใช้เครื่องหมาย <) ดังตัวอย่างนี้ ชุดแรก เรียงเงื่อนไขจากน้อยไปหามาก

ชุดหลังจึงต้องสลับเงื่อนไข โดยเรียงเงื่อนไขจาก มากสุดไปหาน้อยสุด เช่นในที่นี้ ชุดที่สอง เรียงเงื่อนไข จาก >=90 ไป >=85 ไป >=80


ถ้าชุดแรกขึ้นต้นด้วย >= ไปเรื่อยๆ ชุดหลังจะต้องเขียนเงื่อนไขให้เป็น <

ถ้าชุดแรกเขียนเงื่อนไขโดยขึ้นต้น <= ไปเรื่อยๆ ชุดหลังจะต้องเขียนเงื่อนไขให้เป็น >

เป็นอย่างนี้เสมอ นั่นคือ เมื่อจบเงื่อนไขชุดแรก ขึ้นชุดหลังต้องสลับเงื่อนไข และอย่าลืมว่า เงื่อนไขสุดท้ายของแต่ละชุด ควรเป็น "" (ค่าว่าง หรือ Blank)