日常生活中,对于排名次这类事情屡见不鲜。特别是教师等人群时不时需要给学生成绩进行排名。Excel也提供排名函数Rank函数,表示某个数值在某个数值集合里面的“名次”。但该函数在处理有多个相同数值的时候就会显示出与我们思维不一样的地方。
(图1)
如图1所示,按照我们平时的思维模式,两个第3名后面应该是第4名,而不是第5名。所以,我们就得用其他方式来实现“中国式排名”。而“中国式排名”的本质是“在某个数值集合中,大于等于某个数值的不重复数值的个数”。如,小钱的成绩是75,在C2:C8单元格区域的数值集合中,大于等于75的不重复数值的个数有95、89、84(重复2次)、75(数值本身),一共4个,故小钱的排名是第4名。所以,根据这个思路,有以下2种办法供大家参考。
一、数组公式
在E2单元格中输入如下公式:
=SUM(IF($C$2:$C$8>=C2,1/COUNTIF($C$2:$C$8,$C$2:$C$8)))
输入完毕之后,按Ctrl+Shift+Enter组合键,向下填充,打完收工。如图2所示。
(图2)
【解析】
1. $C$2:$C$8>=C2。用C2与C2:C8单元格区域内的所有数值比较,得到一个False与True的数组,数组如下:
{TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE}
2. COUNTIF($C$2:$C$8,$C$2:$C$8)。统计每个数值重复的次数,得到如下的数组:
{2;1;2;1;1;1;1}
3.通过倒数,1/ COUNTIF($C$2:$C$8,$C$2:$C$8)得到了如下数组:
{0.5;1;0.5;1;1;1;1}
4.IF($C$2:$C$8>=C2,1/COUNTIF($C$2:$C$8,$C$2:$C$8)),得到以下数组:
{0.5;1;0.5;1;FALSE;FALSE;FALSE}
【备注】
If函数省略value_if_False参数,表示当logical_test 为False时,返回False。
5.通过Sum函数将{0.5;1;0.5;1;FALSE;FALSE;FALSE}数组汇总,得到数字3,即是张三的成绩排名。
【备注2】
①通过倒数,不管该数值在集合里重复多少次,其倒数和均为1。
②在四则运算上,True相当于1,False相当于0。
二、分步处理
对于数组函数还不清楚的各位少侠,可以添加辅助列来完成排序。
1.在F2中输入如下公式:
=IF(COUNTIF($C$2:C2,C2)=1,C2)
向下填充,返回如图3的结果。
【此公式的作用是将重复出现的数值均转换成False,提取出不重复数值。】
(图3)
2.在H2中输入如下公式:
=COUNTIF($F$2:$F$8,">="&C2)
之后,向下填充,完成。如图4所示。
(图4)
【备注3】
所有的操作均围绕中国式排名的本质“在某个数值集合中,大于等于某个数值的不重复数值的个数”。也可以用其他公式来解决,如:用Sumproduct函数或者Large函数、甚至用
Frequency函数均可以实现中式排名。
第1个函数:
=SUMPRODUCT(($C$2:$C$8>=C2)/COUNTIF($C$2:$C$8,$C$2:$C$8))
第2个函数【数组函数】:
=MATCH(C2,LARGE(($C$2:$C$8)*ISNUMBER($F$2:$F$8),ROW($1:$99)),0)
第3个函数【数组函数】:
=COUNT(0/FREQUENCY(IF(($C$2:$C$8>=C2),$C$2:$C$8),$C$2:$C$8))
以上3个公式,第2个和第3个需要在公式输入完毕之后按Ctrl+Shift+Enter来告诉Excel这是一个数组函数。以上公式亲测有效,交由各位少侠去探索。
Tips1:在日常工作中,只需要挑选1、2种适合自己的办法来处理此类问题。待熟悉后,再慢慢掌握其他办法。Excel公式很多时候一看就会,一做就错,所以要刻意练习,多多练习。
Tips2:若发现以上有误,或者可以改进的地方,还请不吝指教,感谢非常。
Tips3:万丈高楼平地起!
喜欢的可以关注下,谢谢您。