如何对数据进行排名?如何进行唯一排名?如何进行中国式排名?(排名函数详解)
在Excel中应该如何进行数字的排名?为什么有那么多排名函数?唯一排名(不重复排名)怎么做?什么是中国式排名?应该如何进行中国式排名?
我们以前介绍排名的应用或者做图表时,经常需要对数据进行排名,例如,基本上我们的柱形图和条形图都是进行排序的。为了能够保证图表可以根据数据自动变化,我们都使用排名函数制作作图数据。在很多情况下,其实隐含了一个要求,那就是排名是唯一的,否则就会出问题。
排名函数介绍
Excel中进行排名可以使用排名函数。有3个函数:
RANK
RANK.AVG
RANK.EQ
其中RANK和RANK.EQ的功能是一样的。RANK是为了与以前的版本兼容而保留的版本。RANK.EQ是新实现的版本。
所以,这里我们就只介绍RANK.EQ和RANK.AVG两个函数。
尽管RANK是为了与以前的版本兼容而保留的函数,也不太用担心微软会把它抛弃,尽管有这种可能性,但是可能性是比较小的😀。
1. RANK.EQ
RANK.EQ的参数如下:
实际上是很简单的,就是判断一个数字(number)在一组数组(ref)中间的名次,返回的结果需要根据给定的顺序(order)是正数还是倒数。
F,G两列是RANK.EQ函数分别用0和1作为参数的结果。可以看出,0就是正数,1就是倒数。
以下我们就用0作为参数来介绍这两个函数。
从上图看,这个正数排名会将相同的数字排成一样的排名,例如,三个数量都是1000,所以他们的排名都是1。这叫做重复排名。一般来说是重复排名在大多数场合下就足够了。但是在本文开头介绍的一些场景中,可能就需要不重复排名。
从图上还可以看出,3个1000都排名第一,但是那个900就排名第四了。这叫做占位排名,也就是尽管3个都是第一,但是他们把1,2,3名的位置都占了。实际中,有另外一种需求,也就是说,你们3个1000是第一,我的900就是第二,这叫做不占位排名,又有一些人管这种排名叫中国式排名。
2. RANK.AVG
这个函数的用法基本上与RANK.EQ一样。唯一不同的就是当名次相同时如何处理。
从图上可以看出,当名次不重复时,这两个函数返回结果一样,例如,数量300,排名都是11。而当名次重复时,结果就不一样了。
当遇到重复名次时,RANK.AVG会把他们占位的名次取平均值,然后返回。
例如,数量1000,分别占位1,2,3,返回结果就是(1+2+3)/3=2
数量500,分别占位9,10,返回结果就是(9+10)/2=9.5
这就是函数名字中那个AVG的由来😀
在一些不太常见的场合下,这个函数还是有实际需求背景的。以前没有这个函数时,需要添加名次修正系数,那又是一个复杂的公式和复杂的概念了。
不重复排名
如本文开头介绍中提到的,如果我们希望要不重复排名,应该怎么办?
最简单的是使用下面的公式:
=RANK.EQ(C3,$C$3:$C$14,0)+COUNTIF($C$3:C3,C3)-1
实际上我们就是将名次相同的那些数量根据出现的顺序再做一次排名,先出现的在前面,后出现的在后面。这是一种很常见的排名,例如,成绩相同的按姓氏笔画(或拼音)排名,就可以先将数据区域按照姓名列排序(用笔画顺序或拼音顺序),然后再用这个公式排名。
公平吗?不太公平!不过这个看场合,如果就是决定点名的顺序,这个就无所谓。但是在有些场合下这么做就不行。我就遇到过客户坚决反对这种排名,那应该怎么办?
答案是扔骰子。我认为在不作弊的情况下,这是天底下最公平的做法了。
在Excel中 扔骰子就是使用随机数函数RAND。
我们添加一个辅助列:排序数量,使用下面的公式:
=C3+RAND()/100
可以将格式设置为小数点位数为0。然后使用RANK.EQ函数:
=RANK.EQ(G3,$G$3:$G$14,0)
得到结果如下:
我管这个排名方法叫做公平排名法😀
使用这种方法偶尔会遇到排名重复的情况,按F9键重新计算一下就可以了。
中国式排名
下面我们来看一看不占位排名的公式(网上公式很多,其实原理都是一样的):
=SUMPRODUCT(($C$3:$C$14>=C3)/COUNTIF($C$3:$C$14,$C$3:$C$14))
我们可以看到,3个数量为1000的排名都是第一,数量为900的排名是第二。
这个公式还是比较复杂的,可以不看原理,当作一个固定用法记在小本本上就可以了。如果希望理解原理,我这里大致解释一下(以C7=900为例):
($C$3:$C$14>=C7)是判断比当前值C3大或相等,这里结果是数组(1,1,0,0,1,0,0,0,0,0,0,1),而COUNTIF($C$3:$C$14,$C$3:$C$14)是一个数组,分别计算每个数值出现的次数,分别是(3,3,1,2,1,1,2,1,2,2,1,3),求得倒数后与前面的数组对应相乘再求和结果就是2。
好了,今天的分享就到这里了
取得本文模板文件的方式: