วันจันทร์ที่ 9 พฤศจิกายน พ.ศ. 2552

RANK

RANK ใช้จัดอันดับตามคะแนนมากไปน้อยลดหลั่นกันลงไป หรือจะจัดลำดับจากคะแนนน้อยไปหามากก็ได้

ไวยากรณ์
=RANK(number,ref,order)
=RANK(จำนวน หรือเซลล์อ้างอิง,ชุดข้อมูลที่ให้อ่านค่า,0 หรือ 1)


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


ตัวอย่าง


กรณีเรียงอันดับจากมากไปน้อย คือ คะแนนมากอยู่อันดับหนึ่ง คะแนนน้อยกว่าอยู่อันดับถัดมา แบบนี้สามารถละ ,0 ได้

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

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




การจัดอันดับคะแนนแบบ"กอล์ฟ"

โจทย์แบบนี้เจอบ่อย ขอเรียกว่าการจัดอันดับคะแนนแบบกอล์ฟก็แล้วกัน เช่นการแข่งขันกอล์ฟที่มีแต้มต่อ และกรณีที่มีผู้ที่ได้คะแนนเท่ากันจะมองที่แต้มต่อ

โจทย์ต่อไปนี้กำหนดว่า หากคะแนนเท่ากันให้มองที่แต้มต่อถ้าใครแต้มต่อ น้อยกว่าให้ถือเป็นผู้ชนะ(จะกำหนดให้ผู้มีแต้มต่อมากกว่าชนะก็ได้ แล้วแต่กรณี)





หลักการง่ายๆคือ ทำแต้มต่อให้เป็นจุดทศนิยม แล้วนำไปบวกกับคะแนนที่ได้ จะได้คะแนนที่ไม่ซ้ำกันออกมา แล้วจึงไปหาลำดับ ในที่นี้ให้ แต้มต่อถูกหารด้วย 100 ก่อน แล้วนำไปบวกกับคะแนนที่ได้

การหารแต้มต่อเพื่อให้เป็นทศนิยมในที่นี้ ควรหารด้วย 100 ขึ้นไป เนื่องจากแต้มต่อเป็นเลขไม่เกินสองหลัก




หากโจทย์กำหนดว่าให้หาอันดับที่ 1,2,3 ออกมาเลยว่าเป็นใคร จากตัวอย่างข้างบน ค่า RANK ที่ออกมาจะพบว่า คุณ E ได้ที่ 1 คุณ A ได้ที่ 2 และ คุณ C ได้ที่ 3

แต่กรณีแบบนี้จะไม่ใช้ RANK เลยก็ได้ เนื่องจากโจทย์ไม่ได้ต้องการหา"ค่า" RANK แต่ต้องการให้หาว่าใครชนะ ที่ 1,2,3 จึงควรใช้ คะแนนที่น้อยที่สุดเป็นตัววัดแล้ว ชี้ลงไปว่า ใครได้ที่ 1,2,3 การวัดค่าน้อยไปมาก เราจะใช้ฟังก์ชั่น SMALL มาช่วย โดยไม่ต้องใช้ RANK เลย แล้วใช้ MATCH + INDEX หารายชื่อของผู้ที่ได้คะแนนตามต้องการออกมา

จะเปลี่ยนค่าตัวเลขเพื่อหาค่าน้อยไปมาก ที่ SMALL

กรณีโจทย์ดังกล่าวหากไม่เพิ่มคอลัมน์คะแนน-2 ขึ้นมาเลยก็ทำได้ โดยทำเป็น Array ดังนี้ หลักการยังคงใช้ SMALL + MATCH+INDEX เหมือนเดิม



ที่เซลล์ใดๆ ในที่นี้คือ D12 พิมพ์ =INDEX($B$4:$B$10,MATCH(SMALL($D$4:$D$10+$C$4:$C$10/100,1),$D$4:$D$10+$C$4:$C$10/100,0))
จากนั้น(บังคับ) กดแป้น Ctrl +Shift +Enter พร้อมกัน
ติดรูป กล Array

{=INDEX($B$4:$B$10,MATCH(SMALL($D$4:$D$10+$C$4:$C$10/100,1),$D$4:$D$10+$C$4:$C$10/100,0))}


RANK กระโดดและ RANK ไม่กระโดด

โดยปกติทั่วๆไปนั้น ฟังก์ชั่น Rank จะจัดอันดับแบบกระโดดให้เสมอเช่น มีลำดับที่ 3 อยู่ 3 คน ดังนั้นคนที่ได้คะแนนถัดไปจะถูกจัดเป็นลำดับที่ 6 ทันที เนื่องจากถือว่า คนที่ได้ที่ 3 ทั้ง 3คนนั้น ถูกมองว่าจะจัดอันดับเป็น 3-4-5 ดังนั้น คนที่ได้อันดับถัดมาจะถูกแสดงเป็นอันดับ 6
ถ้าหากต้องการทำให้เป็นแบบ Rank ไม่กระโดดจะทำอย่างไร เช่น กรณีที่มีผู้ที่ได้อันดับ 3 อยู่ 3 คน คนที่ได้อันดับถัดไป ให้แสดงเป็นอันดับ 4 ไม่ใช่อันดับ 6


ตัวอย่าง มีคะแนนอยู่ชุดหนึ่งต้องการจัดลำดับแบบไม่กระโดด

สามารถทำได้หลายๆวิธี จะยกตัวอย่างสัก 2 วิธี


วิธีที่ 1 หากสามารถ Sort data ได้ จะช่วยลดความยุ่งยากลงไปได้มาก
แล้วใช้ IF ธรรมดาเงื่อนไขเดียว จัดอันดับออกมา



หากมีกรณีไม่สามารถ Sort data ได้ จะต้องใช้ฟังก์ชั่นอื่นๆมาช่วยปรับ
ข้อมูลหรือ ชุดข้อมูลให้เป็นไปตามที่ต้องการก่อน




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

ถ้าเข้าใจได้ดี จะพบว่า การซ้อนๆอะไรๆ เข้าไปในสูตรเพื่อให้มันเป็นสูตรเดียวกันที่กระชับนั้น จะมีลีลาของมันเอง และวิชา Excel ของท่านจะก้าวหน้าไปอย่างเงียบๆโดยไม่รู้ตัว

เชื่อผมเต๊อะ !!

รายละเอียดสูตรต่างๆ เช่น IF และ VLOOKUP ในที่นี้จะไม่อธิบายตัวสูตรละเอียด เนื่องจาก ในบทความก่อนๆนี้ ทั้ง IF และ VLOOKUP ผมได้อธิบายมาค่อนข้างละเอียดระดับหนึ่งแล้ว

และต่อๆไป อาจจะอธิบายในสูตรต่างๆ ที่เคยเขียนไว้ให้น้อยลง จะไปเน้นถึง ลีลา การเขียนสูตรและความเข้าใจว่า จะต้องเขียนสูตรอย่างไร และจะใช้สูตรนั้นๆ อย่างไร ให้มากขึ้น