Menu

Excel RANK 排名函数:RANK.EQ、RANK.AVG 与并列

=RANK.EQ(B2,$B$2:$B$7) 给出 B2 在 B2:B7 各值中的名次,最大值排第 1。把 1 作为第三个参数,就从最小值开始排。并列的值名次相同;COUNTIFS 可以做组内排名。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=RANK.EQ(B2,$B$2:$B$7) 返回 B2 在 B2:B7 各值中的名次,最大的值排第 1。要让最小的值排第一,把 1 作为第三个参数:=RANK.EQ(B2,$B$2:$B$7,1)。

从两端给销售额排名
C2
ABCD
1NameSalesRank (high = 1)Rank (low = 1)
2Ana420034
3Ben310052
4Cleo560016
5Dan280061
6Eve490025
7Finn370043
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Cleo 的销售额最高,在 C 列排第 1,在 D 列排第 6。把 Dan 的销售额改成 6000,所有名次都会更新。

RANK.EQ 语法

=RANK.EQ(number, ref, [order])
  • number:要排名的值,通常是同一行的单元格。
  • ref:在其中排名的列表。设为绝对引用($B$2:$B$7),这样向下填充公式时每一行的列表都相同。
  • order:省略或用 0 表示降序(最大的排 1),用 1 表示升序(最小的排 1)。

ref 中的文本和空单元格会被忽略。如果 number 根本不在 ref 中,RANK.EQ 返回 #N/A。

RANK.EQ 和 RANK.AVG 是 Excel 2010 引入的。旧的 RANK 函数仍然可用,结果与 RANK.EQ 相同;Google Sheets 三个都有。

并列:RANK.EQ 与 RANK.AVG

值并列时,RANK.EQ 给它们相同的名次,并跳过被占用的名次,就像体育比赛的成绩那样:两个人并列第二,下一个就是第四。RANK.AVG 给每个并列值它们所占位置的平均值。

并列的分数
C3
ABCDE
1NameScoreRANK.EQRANK.AVGUnique rank
2Ana95111
3Ben88232
4Cleo88233
5Dan76555
6Eve88234
7Finn64666
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Ben、Cleo 和 Eve 并列 88 分。RANK.EQ 给三人都排 2,Dan 排 5。RANK.AVG 给他们排 3,即第 2、3、4 位的平均值。

E 列按在列表中的先后顺序打破并列:COUNTIF($B$2:B2,B2) 统计这个分数从顶部到当前行已出现了几次(填充时只有区域的末端会移动)。第一个 88 加 0,第二个加 1,第三个加 2,所以 1 到 6 每个名次都恰好出现一次。当名次要用于“谁是第 3 名”这样的查找时,就该用这种写法,因为查找需要每个名次都唯一。

组内排名

Excel 没有 RANKIF。要让每位销售人员只和同一区域的人比较,就统计该区域中有多少人卖得更多,再加 1:

在每个区域内排名
D2
ABCD
1NameRegionSalesRank in region
2AnaNorth42003
3BenSouth31003
4CleoNorth56001
5DanSouth28004
6EveNorth49002
7FinnSouth37001
8GiaNorth39004
9HalSouth33002
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

Cleo 在 North 领先,Finn 在 South 领先。把 Ana 的区域改成 South:North 的名次随之补位,South 则多了第五个人。组内升序排名改用 "<"&C2。并列的处理方式与 RANK.EQ 相同:并列的值名次相同。多条件计数的更多内容见 COUNTIFS 一文。

按名次显示前三名

名次列回答的是“这个人排第几”;要回答“谁是第一名”,就按名次查找。C 列是不重复的名次时,=XLOOKUP(1,C2:C7,A2:A7) 返回排名第 1 的名字(在 Excel 2019 及更早版本中用 =INDEX(A2:A7,MATCH(1,C2:C7,0)))。没有名次列时,=LARGE(B2:B7,2) 直接返回第二大的值,=SORTBY(A2:B7,B2:B7,-1) 则把整张表从高到低列出(需要 Excel 2021 或 Microsoft 365;见 SORT 与 SORTBY)。

前 3 名的名字
F2
ABCDEF
1NameSalesRankPlaceName
2Ana420031Cleo
3Ben310052Eve
4Cleo560013Ana
5Dan28006
6Eve49002
7Finn37004
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

C 列是并列一节中的不重复名次,所以并列永远不会让某个名次空缺。F2 到 F4 列出 Cleo、Eve 和 Ana。把 Ana 的销售额改成 6000,她就会升到第一。

动手试试:最快的跑者排第一

400 米用时(秒)
C2
ABC
1RunnerTimeRank
2Ana58.4
3Ben55.1
4Cleo61.9
5Dan53.7
6Eve57.3
7Finn60.2
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 C2 中给 B2 中 Ana 的用时在 B2:B7 所有用时中排名,用时最快(最小)的排第 1。公式会向下填充到 C7,所以列表要用绝对引用。

班级内排名
D2
ABCD
1StudentClassScoreRank in class
2AnaRed81
3BenRed92
4CleoBlue77
5DanRed69
6EveBlue95
7FinnRed85
8GiaBlue88
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 D2 中只在 Ana 所在班级(B 列)的学生中给她的分数排名,分数最高的排第 1。公式会向下填充到 D8。

常见错误:区域用了相对引用

没有 $ 符号时,每向下填充一次,区域就下移一行,于是每一行都在一个从本行开始、越来越短的列表中排名。名次看起来合理,实际上是错的:

区域移动了:名次错误
C4
ABC
1NameSalesRank
2Ana42003
3Ben31004
4Cleo56001
5Dan28003
6Eve49001
7Finn37001
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

点击 C4:它的区域是 B4:B9,所以 Cleo 只和她这一行及以下的人比较。尽管 Cleo 卖得更多,Eve 却显示第 1;Finn 也显示第 1,因为他只和自己比较。把 C2 改成 =RANK.EQ(B2,$B$2:$B$7),整列就会自动纠正。光标在区域中时按 F4 即可添加 $ 符号(Mac 上按 Cmd+T 或 Fn+F4);原因见绝对引用。

常见问题

Excel 中如何给数字排名?

用 =RANK.EQ(B2,$B$2:$B$7) 并向下填充。最大的值排第 1。区域要保留 $ 符号,这样填充时它不会移动。

Excel 中如何从小到大排名?

把 1 作为第三个参数:=RANK.EQ(B2,$B$2:$B$7,1)。适用于比赛用时、价格等最小值应该排第一的情况。

RANK.EQ 和 RANK.AVG 有什么区别?

两者只在并列时不同。如果两个值并列第二,RANK.EQ 给两者都排 2,下一个值排 4。RANK.AVG 给两者都排 2.5,即第 2 和第 3 位的平均值。

Excel 中如何做不重复的排名?

加上该值的累计出现次数:=RANK.EQ(B2,$B$2:$B$7)+COUNTIF($B$2:B2,B2)-1。两个并列值中的第一个保留原名次,第二个得到下一个名次。

Excel 中如何在组内排名?

统计同组中比它大的值的个数,再加 1:=COUNTIFS($A$2:$A$9,A2,$C$2:$C$9,">"&C2)+1。Excel 没有 RANKIF 函数。

Coddy 编程语言插图

和 Coddy 一起学编程

开始