สูตรลัด เลือกเกรดครั้งที่ดีที่สุด

“อยากเขียนสูตรเลือกเกรดครั้งที่ดีที่สุด ทำไงดี?” เพื่อนผมคนหนึ่งถาม

“ตอนนี้ทำแมนวลอยู่ เหนื่อยมากมาย” (ประโยคนี้แปลว่าต้องช่วยแล้วล่ะ)

โจทย์ของเพื่อนผมหน้าตาประมาณนี้ครับ

Picture_BestGradeSelection_Problem_NoResult_180103

เพื่อนผมคนนี้เป็นอาจารย์ วิชาที่สอนมีนักเรียนลงเรียนมากกว่า 500 คน

วิชานี้มีสอบ 3 ครั้ง การสอบแต่ละครั้งตัดเกรดแยกกันไป โดยแบ่งเกรดทั้งหมดเป็น 12 ระดับ (ซอยยิบสุดๆ) ดังนี้

GradeTable_180203

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

(อาจารย์ใจดีแบบนี้ยังมีหลงเหลืออีกหรือนี่ ^^)

หรือสุดท้ายแล้วจะได้เกรดดังนี้

Picture_BestGradeSelection_Problem_WithResult_180103

ปัญหาก็คือ ที่ผ่านมาเค้าเลือกเกรดครั้งที่ดีที่สุดแบบแมนวล ซึ่งใช้เวลานาน(มาก) แถมโอกาสผิดก็มี(สูง)

เลยอยากหาสูตรที่เป็นแบบอัตโนมัติ ประมาณว่าเขียนปรื๊ดเดียว ใช้ได้เลย

ทำไงดี?

ติ๊กต่อก ติ๊กต่อก …

โจทย์ข้อนี้ใช้ Excel แก้ปัญหาได้ (อย่างน้อย) 2 วิธีครับ

ผมขอเรียกว่า แบบยาว กับ แบบสั้น

มาดู แบบยาว กันก่อนครับ

ที่เรียกว่า แบบยาว เพราะเป็นวิธีการคิดแบบตรงๆ สูตรค่อนข้างยาว

หรือถ้าเขียนเป็นสเต็ปการคำนวณก็คือ

  1. แปลงเกรดจากตัวอักษรเป็นคะแนน (ตัวเลข)
  2. เลือกคะแนนที่สูงที่สุด
  3. แปลงคะแนนสูงที่สุดให้เป็นตัวอักษร

มาเริ่มจากสเต็ปที่ 1 แปลงเกรดจากตัวอักษรเป็นคะแนน กัน

สมมติสร้างตารางแปลงเกรดไว้ที่เซลล์ L2-M13 ตามนี้

GradeTable_LongMethod_180203

แปลงเกรดจากตัวอักษรเป็นคะแนน โดยใช้สูตร

=VLOOKUP( B2, $L$2:$M$13, 2, 0)

ได้ผลลัพธ์หน้าตาประมาณนี้ครับ

ChangeGradeToPoint

จบสเต็ปที่ 1 แล้ว

คราวนี้ก็มาสเต็ปที่ 2 เลือกคะแนนที่สูงที่สุด

สเต็ปนี้ง่ายมาก เราก็ใช้ฟังก์ชัน MAX หรือเขียนสูตรเป็น

=MAX(F2:H2)

ได้ผลลัพธ์หน้าตาประมาณนี้ครับ

MaxGrade

จบสเต็ปที่ 2 แบบเร็วๆ

คราวนี้ก็มาถึงสเต็ปที่ 3 แล้ว นั่นคือการ แปลงคะแนนสูงที่สุดให้เป็นตัวอักษร

เคสนี้เราคงใช้ฟังก์ชัน VLOOKUP ไม่ได้ เพราะคะแนนที่เป็นตัวอ้างอิงอยู่ด้านขวามือ (ถ้าจะใช้ได้ ต้องสร้างตารางแปลงเกรดใหม่โดยให้คะแนนอยู่คอลัมน์ด้านซ้าย และเกรดที่เป็นตัวอักษรอยู่คอลัมน์ด้านขวา) เราจึงใช้ฟังก์ชัน INDEX และ MATCH แทน

(อ่านรายละเอียดการใช้ฟังก์ชัน INDEX + MATCH ได้ใน บทความนี้ ครับ)

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

=MATCH( I2, $M$2:$M$13, 0)

เคสนี้ I2 = 1.75 ผลลัพธ์ที่ได้คือ 8

MATCH_Grade

(1.75 อยู่ลำดับที่ 8 ขอข้อมูล)

(สูตรนี้เทียบกับ $M$2:$M$13 จึงไม่นับเซลล์ที่เป็นหัวตาราง (M1))

ลำดับที่ 8 ถ้าเทียบเป็นเกรด ก็คือ C- นั่นเอง

เขียนสูตรเพื่อเปลี่ยนลำดับที่ 8 ให้กลายเป็นเกรดโดยใช้ฟังก์ชัน INDEX

=INDEX($L$2:$L$13, 8)

8 ก็คือ MATCH( I2, $M$2:$M$13, 0) รวมสูตรได้เป็น

=INDEX($L$2:$L$13,MATCH(I2, $M$2:$M$13, 0) )

MaxGrade

เสร็จแว๊ว !!

วิธีนี้ต้องเพิ่มคอลัมน์ช่วยคำนวณ (Helper Column) หลายคอลัมน์

ในอีกมุมมองหนึ่ง เราอาจไม่ต้องเพิ่มคอลัมน์ช่วยก็ได้ แต่ยุบสูตรรวมกันเป็นแบบนี้

=INDEX($G$2:$G$13, MATCH( MAX( VLOOKUP(B2,$G$2:$H$13,2, 0),
VLOOKUP(C2,$G$2:$H$13,2,0),
VLOOKUP(D2,$G$2:$H$13,2,0)),
$H$2:$H$13,0))

LongMethod_NoHelperColumn

ได้ผลลัพธ์เหมือนกัน เย้ !

ทั้งสองวิธีใช้สเต็ปการคิดเหมือนกัน เพียงแต่วิธีที่สองไม่ต้องใช้คอลัมน์ช่วย (Helper Column) เท่านั้น

คุณชอบวิธีไหนครับ ^__^

 

คราวนี้มาดูวิธี แบบสั้น กันบ้าง วิธีนี้มีสเต็ปการคิดต่างออกไป ดังนี้

  1. แปลงเกรดจากตัวอักษรให้เป็นลำดับ (ไม่ใช่คะแนน) โดยเทียบจากตารางเกรด
  2. เลือกลำดับที่น้อยที่สุด
  3. แปลงลำดับที่น้อยที่สุดให้เป็นตัวอักษร

วิธีนี้ต้องสร้างตารางเกรดเช่นกัน แต่ตารางเกรดนี้ต้องการเพียงแค่ลำดับการเรียงเกรด ไม่ต้องการตัวเลข

เช่น สร้างตารางเกรดไว้ที่เซลล์ G2-G13 ตามนี้

GradeTable_NoPoint

มาดูกันทีละสเต็ป

เริ่มจากสเต็ป 1 แปลงเกรดจากตัวอักษรให้เป็นลำดับ โดยใช้สูตร

=MATCH( B2:D2, $G$2:$G$13, 0)

เนื่องจากอาร์กิวเมนต์ที่ 1 ของ MATCH เป็นช่วงข้อมูล (B2:D2) ไม่ใช่เซลล์เดี่ยวๆ สูตรนี้จึงต้องเป็นสูตรอาร์เรย์ (Array Formula) เวลาใช้งานต้องกด Ctrl+Shft+Enter แทนการกด Enter

มาดูค่า B2:D2 กันบ้าง

B2 = C-

C2 = D

D2 = D-

ผลลัพธ์จากสูตรนี้ก็คือ

{8,10,11}

GradeTable_NoPoint_Example.png

(สูตรนี้เทียบกับ $G$2:$G$13 จึงไม่นับเซลล์ที่เป็นหัวตาราง (G1))

คราวนี้ก็มาถึงสเต็ปที่ 2 เลือกลำดับที่น้อยที่สุด

เหตุผลที่เลือกลำดับที่น้อยที่สุด (ไม่ใช่มากที่สุด) เพราะเกรดสูง (A = 1) จะมีลำดับน้อยกว่าเกรดต่ำ (F = 12)

สเต็ปนี้ง่ายมาก เลือกลำดับที่น้อยที่สุดโดยใช้ฟังก์ชัน MIN หรือเขียนสูตรเป็น

=MIN({8,10,11})

หรือได้ผลลัพธ์ = 8

เปลี่ยน {8,10,11} ให้กลับเป็น MATCH( B2:D2, $G$2:$G$13, 0) หรือกลายเป็น

=MIN(MATCH( B2:D2, $G$2:$G$13,0))

คราวนี้ก็มาถึงสเต็ปที่ 3 แปลงลำดับที่น้อยที่สุดให้เป็นตัวอักษร

จาก MIN(MATCH( B2:D2, $G$2:$G$13,0)) ได้ผลลัพธ์คือ 8

สเต็ปนี้ก็คือการแปลง 8 ให้กลายเป็นตัวอักษร (เมื่อเทียบกับตารางเกรด) หรือเขียนสูตรเป็น

=INDEX($G$2:$G$13,8)

แทนค่า 8 ด้วย MIN(MATCH( B2:D2, $G$2:$G$13,0))

=INDEX($G$2:$G$13,MIN(MATCH(B2:D2,$G$2:$G$13,0)))

เนื่องจาก MATCH(B2:D2,$G$2:$G$13,0) เป็นสูตรอาร์เรย์ สูตรนี้จึงกลายเป็นอาร์เรย์ด้วย เมื่อพิมพ์สูตรเสร็จแล้ว ต้องกด Ctrl+Shft+Enter แทนการกด Enter

{=INDEX($G$2:$G$13,MIN(MATCH(B2:D2,$G$2:$G$13,0)))}

Picture_BestGradeSelection_Method2

อ้อ! วงเล็บปีกกาในสูตรไม่ได้เกิดจากการพิมพ์นะครับ แต่เกิดจากการกด Ctrl+Shft+Enter

จะเห็นได้ว่าวิธี แบบสั้น นั้นสะดวกกว่า แบบยาว (ทั้งแบบยาวที่มีคอลัมน์ช่วย และไม่มีคอลัมน์ช่วย) มาก

งั้นแปลว่าวิธี แบบสั้น ดีกว่า แบบยาว หรือเปล่า?

คำตอบคือไม่ใช่

งั้นแปลว่าวิธี แบบยาว ดีกว่า แบบสั้น ?

คือตอบคือไม่ใช่อีกเช่นกัน

เอ๊ะ งง ยังไงกันแน่?

คำตอบคือ เลือกวิธีที่เหมาะกับเรา

วิธีแบบสั้น แม้เขียนสูตรสั้นก็จริง แต่เหมาะกับคนที่มีความเข้าใจเรื่องสูตรระดับหนึ่ง และต้องเข้าใจสูตรอาร์เรย์ (Array Formula) ซึ่งถือเป็นหนึ่งในเรื่องยากที่สุดของ Excel

ถ้าเราไม่เข้าใจสูตรอาร์เรย์ การใช้สูตรแบบสั้นอาจหาคำตอบได้เฉพาะครั้งนี้

แต่ถ้าครั้งหน้ามีเกรด A+ เพิ่มมาด้วยล่ะ?

แต่ถ้าครั้งหน้าเพิ่มการทดสอบจาก 3 เป็น 5 ครั้ง แล้วเลือกเกรดที่ดีที่สุดจาก 5 ครั้งล่ะ?

แต่ถ้าครั้งหน้าเงื่อนไขไม่เหมือนเดิมล่ะ?

เราจะปรับสูตรตามเงื่อนไขที่เปลี่ยนแปลงได้ไหม?

ถ้าไม่ได้ การใช้สูตรแบบยาวที่มีคอลัมน์ช่วย (วิธีที่ 1) แม้อาจดูวุ่นวาย แต่เป็นวิธีการที่ชัดเจน สะดวกต่อการแก้ไข

สูตรที่ดีที่สุด ไม่ใช่สูตรที่สั้นที่สุด แต่เป็นสูตรที่เราเข้าใจมากที่สุด

(แน่นอนว่า ถ้าเราเข้าใจสูตรแบบสั้น ถ้าครั้งหน้าเงื่อนไขเปลี่ยนแปลงก็ไม่ใช่ปัญหา จะปรับสูตรให้พลิกแพลงยังไงก็ได้)

เลือกสูตรที่เหมาะกับเรา สั้นบ้าง ยาวบ้าง ไม่เห็นเป็นไรเลย …

ได้คำตอบที่ถูกต้องก็พอแล้ว ^__^

วันนี้เขียนสูตรยาว ฝึกใช้ ฝึกคิดบ่อยๆ ความเข้าใจก็มากขึ้น วันหน้าสูตรก็สั้นเองครับ ^__^

 

ใครสนใจไฟล์ตัวอย่างของบทความนี้ ดาวน์โหลดเพื่อศึกษาได้เลยครับ

BestGradeSelection_180103

.

หากคุณชอบบทความแนวนี้ สามารถอัพเดตบทความใหม่ๆโดยคลิก Like เฟสบุ๊คแฟนเพจ วิศวกรรีพอร์ต หรือคลิก ที่นี่

อย่าลืมแชร์ให้เพื่อนอ่านเพื่อเป็นกำลังใจให้คนเขียนด้วยนะครับ ^__^

วิศวกรรีพอร์ต

คนธรรมดาผู้มีประสบการณ์ทำงานหลากหลายตำแหน่ง คลุกคลีกับการทำรีพอร์ตมาโดยตลอด สุดท้ายค้นพบแนวทางของตัวเอง จึงอยากแบ่งปันเคล็ดลับและประสบการณ์ให้กับผู้สนใจ

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.