RANK.EQ จัดอันดับพื้นฐาน แต่พองานจริงมักเจอโจทย์เพิ่ม เช่น “อันดับที่ไม่มีเลขข้ามเวลามีคะแนนเท่ากัน” “อันดับแยกตามกลุ่ม” หรือ “ทำให้ทุกคนได้อันดับไม่ซ้ำ” บทความนี้รวมสูตรจัดอันดับแบบต่างๆ ที่ RANK.EQ เดี่ยวๆ ทำไม่ได้
ทบทวน: RANK.EQ ปกติจะเว้นเลขเมื่อมีตัวเสมอ
=RANK.EQ(B2, $B$2:$B$6, 0)| A | B | C | |
|---|---|---|---|
| 1 | ชื่อ | ยอดขาย | อันดับ |
| 2 | ก้อง | 500 | 1 |
| 3 | แนน | 300 | 2 |
| 4 | เจน | 300 | 2 |
| 5 | ปุ๊ก | 200 | 4 |
แนนกับเจนได้อันดับ 2 เท่ากัน อันดับถัดไปจึงกระโดดไปเป็น 4 (ไม่มีอันดับ 3)
แบบที่ 1: อันดับไม่มีเลขข้าม (Dense Rank)
=SUMPRODUCT((($B$2:$B$6>B2)/COUNTIF($B$2:$B$6,$B$2:$B$6)))+1| A | B | C | |
|---|---|---|---|
| 1 | ชื่อ | ยอดขาย | อันดับ (dense) |
| 2 | ก้อง | 500 | 1 |
| 3 | แนน | 300 | 2 |
| 4 | เจน | 300 | 2 |
| 5 | ปุ๊ก | 200 | 3 |
คราวนี้ปุ๊กได้อันดับ 3 (ไม่กระโดด) สูตรนับ “จำนวนค่าที่มากกว่า” แบบไม่นับซ้ำ ด้วยการหารด้วย COUNTIF ของตัวเอง
แบบที่ 2: บังคับให้อันดับไม่ซ้ำกันเลย
=RANK.EQ(B2,$B$2:$B$6,0) + COUNTIF($B$2:B2, B2) - 1| A | B | C | |
|---|---|---|---|
| 1 | ชื่อ | ยอดขาย | อันดับ (ไม่ซ้ำ) |
| 2 | ก้อง | 500 | 1 |
| 3 | แนน | 300 | 2 |
| 4 | เจน | 300 | 3 |
| 5 | ปุ๊ก | 200 | 4 |
ตัวที่เสมอกัน ตัวที่เจอทีหลังจะถูกดันลงไปหนึ่งอันดับ (แนน = 2, เจน = 3) ใช้ตอนต้องมีผู้ชนะเดียวหรือจับสลากลำดับ
แบบที่ 3: อันดับภายในกลุ่ม
=COUNTIFS($A$2:$A$7, A2, $C$2:$C$7, ">"&C2) + 1| A | B | C | D | |
|---|---|---|---|---|
| 1 | ห้อง | ชื่อ | คะแนน | อันดับในห้อง |
| 2 | ก | ก้อง | 80 | 2 |
| 3 | ก | แนน | 90 | 1 |
| 4 | ข | เจน | 70 | 1 |
| 5 | ข | ปุ๊ก | 65 | 2 |
COUNTIFS นับว่าในห้องเดียวกันมีกี่คนที่คะแนนสูงกว่า แล้วบวก 1 ได้อันดับภายในห้องนั้นๆ เปลี่ยน > เป็น < ถ้าน้อยแล้วดี (เช่น เวลาวิ่ง)
แบบที่ 4: จัดอันดับด้วย 2 เกณฑ์
เช่น เรียงตามคะแนนก่อน ถ้าเท่ากันให้ดูเวลาที่น้อยกว่า สร้างคีย์รวม แล้ว RANK
=SUMPRODUCT(($B$2:$B$7*1000 - $C$2:$C$7 > B2*1000 - C2)*1) + 1
คูณคะแนนด้วย 1000 เพื่อให้มีน้ำหนักหลัก แล้วลบเวลาออกเป็นตัวตัดสินรอง ปรับตัวคูณตามช่วงข้อมูลจริง
ข้อควรรู้
- อาร์กิวเมนต์ที่ 3 ของ RANK.EQ —
0หรือเว้นว่าง = มากอยู่อันดับ 1,1= น้อยอยู่อันดับ 1 - วิธี COUNTIFS ดีสุดสำหรับอันดับในกลุ่ม — อ่านง่ายและไม่ต้องใช้ array
- อยากได้ Top N ต่อกลุ่ม — ใช้สูตรอันดับในกลุ่มแล้วกรอง
≤3หรือใช้ LARGE ต่อกลุ่ม - อันดับเป็นเปอร์เซ็นไทล์ — ใช้ PERCENTRANK