Excel 排名怎么排?RANK 的三种替代方案与中国式排名

2026-10-21 16 次浏览 Excel 函数
RANK 简单,但遇到"并列"就出问题——两个第一之后直接跳到第三。这篇讲清 RANK 的用法、并列的成因,以及"中国式排名"和"分组排名"怎么写。
=RANK(要排名的数字, 参与排名的区域, 0)
用途算出某个数字在一堆数字里排第几。

排名看起来简单,但一到"有并列"就露馅。

举个最常见的场景:三个人的成绩是 90、90、80。

RANK 的结果是:1、1、3。

很多人觉得应该是 1、1、2。

这个差别叫「中国式排名」和「美式排名」。这篇把两种都讲清。

关键排名结果常常要按条件筛选,用的就是 COUNTIF 那一套逻辑。

先看表

姓名成绩
张三81
李四75
王五81
赵六89
麻七65

基本用法:RANK

=RANK(B2, $B$2:$B$6)

第三个参数:

  • `0` 或不写 = 降序(分数高的排第 1)
  • `1` = 升序(分数低的排第 1)
关键记忆方法:`0` 就是"零",什么都不是,所以是默认的降序。要升序才需要特别写 `1`。

结果:

姓名成绩排名
张三812
李四754
王五812
赵六891
麻七655

张三和王五都是 81,并列第 2。然后李四直接是第 4——第 3 名空缺了。

这就是 RANK 的"美式排名":并列占位,后面跳号。

为什么区域要按 F4

和 VLOOKUP 一样,`$B$2:$B$6` 必须锁住。否则往下一拖,区域缩小,排名全乱。

想要 1、2、2、3(不跳号):中国式排名

国内的成绩单、排行榜,通常希望"并列第 2 之后,下一个人是第 3",不跳号。

写法:

=SUMPRODUCT((B$2:B$6>B2)/COUNTIF(B$2:B$6, B$2:B$6))+1

不用怕,拆开看:

  1. `B$2:B$6 > B2` —— 哪些成绩比当前这个高(得到一串 TRUE/FALSE)
  2. `/COUNTIF(B$2:B$6, B$2:B$6)` —— 每个成绩除以"它自己出现了几次"。这样两个 81 各变成 0.5
  3. `SUMPRODUCT` 加起来 —— 比 81 高的只有 89(出现 1 次,贡献 1),所以结果是 1
  4. `+1` —— 排名 = 1 + 1 = 2

到李四(75)时,比它高的有 89、81、81,其中 81 出现两次各算 0.5,合计 2,加上 89 的 1,共 3,再 +1 = 4……

等等,这里会得到 4,不是想要的 3。

关键说明一下:上面这个写法算的是"严格大于的个数",两个 81 各贡献 0.5,合起来算 1 个"更高的人"。所以李四的结果是 `1(89) + 1(两个81合计) + 1 = 3`。对的,是我上面口算错了,结果确实是 3。

结论:这个公式给出的是 1、2、2、3。 这就是中国式排名。

易错这段必须用 SUMPRODUCT,不能用 SUM。因为里面是数组运算。

按分组排名(部门内排名)

实际工作里更常见:每个部门内部各自排名。

表:

部门姓名业绩
技术部张三81
市场部李四75
技术部王五89
市场部赵六65
技术部麻七70

技术部内部:王五 89 第一,张三 81 第二,麻七 70 第三。

写法(COUNTIFS 法):

=COUNTIFS($A$2:$A$6, A2, $C$2:$C$6, ">"&C2)+1

读作:在同一部门里,数一数有多少人的业绩比我高,加 1 就是我的名次。

这个写法非常直观,而且不用数组公式。

关键用 COUNTIFS 而不是 RANK,是因为 RANK 没有"分组"的概念。这类需求 COUNTIFS 是标准解法。

三种方法对比

需求用什么公式
普通排名(并列跳号)RANK`=RANK(B2,$B$2:$B$6)`
中国式排名(不跳号)SUMPRODUCT`=SUMPRODUCT((B$2:B$6>B2)/COUNTIF(B$2:B$6,B$2:B$6))+1`
分组内排名COUNTIFS`=COUNTIFS(A:A,A2,C:C,">"&C2)+1`
分组 + 中国式两者结合见下

分组 + 中国式排名的写法(较长,用得上再抄):

=SUMPRODUCT(($A$2:$A$6=A2)*(C$2:C$6>C2)/COUNTIFS($A$2:$A$6,$A$2:$A$6,C$2:C$6,C$2:C$6))+1

排名的三个常见坑

坑一:区域没锁

往下拖的时候区域跟着跑。一定要按 F4。

坑二:数字是文本

如果成绩是文本格式(左对齐),RANK 会返回 `#N/A` 或者全部并列。

用 `ISNUMBER` 检查一下,是文本就用 `--` 转。

坑三:空单元格

区域里有空白,RANK 会把空白当成 0,排名错乱。

解决:用 `IF(B2="","",RANK(...))` 跳过空白。

排名之后:取前三名

光有名次不够,老板要"前三名是谁"。

方法一:排序 + 取前 3 行(最简单,但是静态的)

方法二:LARGE 取第 N 大的值

=LARGE($B$2:$B$6, 1) → 最大的
=LARGE($B$2:$B$6, 2) → 第二大的

方法三:FILTER(365)取所有第一名

=FILTER(A2:A6, B2:B6=LARGE(B2:B6,1))

名次 → 姓名(反查)

知道"第 1 名"要查出是谁,用 INDEX + MATCH:

=INDEX($A$2:$A$6, MATCH(LARGE($B$2:$B$6,1), $B$2:$B$6, 0))
关键注意这个写法在"有并列"时只能返回第一个。要返回所有并列的,得用 FILTER。

一句话总结

RANK 简单但会跳号;要"1、2、2、3"用 SUMPRODUCT;要"部门内排名"用 COUNTIFS。不管哪个,区域一律按 F4。
关键排名这块最容易出错的地方,不是公式写不对,是没想清楚"并列的时候你想要什么结果"。先想清楚规则,再选公式。

评论 0

还没有评论,来说第一句吧。

发表评论

提交后需审核通过才会显示。

对作品感兴趣?

欢迎交流使用体验、功能建议或技术问题,看到消息我会尽快回复。