做销售数据分析的时候,经常需要给业绩排个名次。如果手动排序再标序号,数据一多就非常麻烦。这时候,Excel的 RANK函数 就派上用场了。RANK函数 的作用是可以返回一个数字在数字列表中的排位。排位就是这个数字跟列表中其他值比,它排第几。RANK函数一个公式下拉,名次自动生成。
RANK函数的基本语法
RANK函数的写法非常简洁:
=RANK(number, ref, [order])
| 参数 | 说明 |
|---|---|
| number | 要排名的数字(通常是某个单元格) |
| ref | 参与排名的数字区域 |
| [order] | 可选。0或省略=降序(数值越大排名越靠前);非0=升序(数值越小排名越靠前) |
回到上面的销售表,在C2单元格输入以下公式,然后向下填充:
=RANK(B2,$B$2:$B$11,0)
-
B2:要排名的销售额 -
$B$2:$B$11:所有销售额所在的区域(绝对引用,防止下拉时区域变动) -
0:降序排列,销售额越高名次越靠前

RANK函数的两个“兄弟”:RANK.EQ和RANK.AVG
从Excel 2010开始,RANK函数被细分为两个新函数。虽然老的RANK函数还能用,但了解这两个“兄弟”会更有帮助。
RANK.EQ —— 跟RANK完全一样
RANK.EQ 中的 “EQ” 是 “Equal”(相等)的缩写。它的排名逻辑跟老的 RANK函数 完全一样:相同数值给相同排名,但后续排名会跳过。
=RANK.EQ(B2, $B$2:$B$11, 0)
效果跟 =RANK(...) 一模一样。
RANK.AVG —— 并列时取平均排名
RANK.AVG 在处理并列排名时有所不同——它会计算平均排名。
=RANK.AVG(B2, $B$2:$B$11, 0)
还是上面的数据,9200出现了两次。它们的排名本应是第2和第3,RANK.AVG 取平均值 (2+3)/2 = 2.5,所以两人都显示第2.5名。

什么时候用哪个?
| 场景 | 推荐函数 |
|---|---|
| 考试排名、体育赛事(要显示第1、第2、第3...) | RANK 或 RANK.EQ |
| 统计学分析(需要平滑处理并列数据) | RANK.AVG |
| 旧版Excel兼容 | RANK |
一个让很多人困惑的问题:排名为什么会“跳号”?
用 RANK函数 做排名时,很多人会发现一个现象:两个并列第1之后,下一个直接变成第3,没有第2。这不是函数出错了,而是 RANK函数 的设计逻辑就是如此。它采用的是“竞争性排名”规则:两个人并列第1,说明有两个人排在第1和第2的位置,下一个自然就是第3。
如果你需要“不跳号”的排名(即1、1、2、3这种“密集排名”),需要用到组合公式:
=SUMPRODUCT((B$2:B$6>B2)/COUNTIF(B$2:B$6, B$2:B$6)) + 1
这个公式稍微复杂一些,但可以实现名次连续、不跳号的效果。
使用RANK函数的三个注意事项
第一,区域一定要用绝对引用。 如果写成 =RANK(B2, B2:B11, 0) 然后下拉,区域会变成 B3:B7、B4:B8……排名区域越来越小,结果全错。正确的做法是使用 $ 锁定区域,如 $B$2:$B$11。
第二,文本和空值会被忽略。 RANK函数只对数字进行排名,区域中的文本和空单元格不会参与计算。
第三,降序还是升序,想清楚再选。 第三个参数填 0 或省略,数值越大排名越靠前(适合成绩、销售额);填 1 或任何非0数字,数值越小排名越靠前(适合用时、成本)。
常见问题解答
问题1:RANK、RANK.EQ和RANK.AVG到底有什么区别?
简单来说:RANK 和 RANK.EQ 完全一样,并列时给相同排名,后续跳过;RANK.AVG 并列时给平均排名。Excel 2010之后推荐使用 RANK.EQ 和 RANK.AVG,老的 RANK 函数保留是为了兼容旧版本。
问题2:为什么我的RANK函数返回了错误值?
最常见的原因是排名区域没有用绝对引用($ 符号)。检查一下公式中的 ref 参数是否写成了类似 B2:B10 而不是 $B$2:$B$10。另外也要确认排名区域中是否包含非数字内容。
问题3:如何实现“不跳号”的连续排名?
RANK函数默认会跳号。如果需要1、1、2、3这种连续排名,可以用以下数组公式:
=SUMPRODUCT((B$2:B$6>B2)/COUNTIF(B$2:B$6, B$2:B$6)) + 1
输入后按 Ctrl+Shift+Enter 确认(老版本Excel需要)。
总结
RANK函数 是Excel中最直接的排名工具。记住三个核心点:
-
语法:
=RANK(数字, 区域, 排序方式) -
区域要锁定:用
$绝对引用 -
并列会跳号:这是正常现象,不是Bug
评论 (0)