有关排名问题的一些思考和总结

排名的问题困扰了我一段时间,尤其是中式排名和组内排名。我自认为函数学得还不错,基本常用函数都会用,可是面对这个问题我毫无头绪,无从下手。我相信很多人都会有和我一样的感受和困扰,明明每个函数都会用,可一旦遇到问题却还是束手无策。其实这时候不仅仅是函数的问题了,是思路和思维的问题,你对这个问题的认识有多深,怎么样拆解它才是关键。只要思路通了,后面写函数是水到渠成。

由于这个问题一直在我脑海中,所以我也是想了很久,可是无果。后来开始请教人和查资料,最后终于认识到排名问题原来可以看作是一个条件计数的问题。

-01-

美式排名

假如有4个分数90,80,80,70,对这4个分数进行美式排名。90为第1名,第一个80为第2名,第二个80还为第2名,70为第4名。

可以按照我下面说的这个方式来想一下,在这4个数字中大于90的有0个,说明没有大于90的,90就是第1名;大于80的有1个,说明80是第2名;大于70的有3个,所以70是第4名。

这样美式排名就转化为条件计数问题,函数是不是就好写了。

看下面这个问题,求每个人的分数在所有人的分数中的美式排名,在D3单元格输入公式=COUNTIF(C$3:C$13,">"&C3)+1,下拉完成。另一种方法为=SUM(N(C$3:C$13>C3))+1,按ctrl+shift+enter三键。这2种都是条件计数,只是函数写法不同。

-02-

中式排名

还是最开始那个例子,假如有4个分数90,80,80,70,对这4个分数进行中式排名。90为第1名,第一个80为第2名,第二个80还为第2名,70为第3名。如果还用求美式排名的方法求中式排名肯定是不对的。现在70分是第3名,而在美式排名中是第4名。该怎么办呢?

实际上,在美式排名的基础上,加个条件就是中式排名。这个条件就是去重,就是有重复的只留一个。比如上面4个数中,有2个80,去重后就为90,80,70。然后再算大于70的有几个,明显是2个,所以70是第3名。

去重的方法主要有2种,一种是把同一类所有重复出现的通过运算最后组合成1,常用的函数为=1/countif(区域,区域);另一种是把第一次出现的保留,把后续重复出现的屏蔽掉,常用的函数为=match(区域,区域)=row(1:区域的行数)

下面看一下中式排名,第一种公式为=SUM((C$18:C$28>=C18)/COUNTIF(C$18:C$28,C$18:C$28)),按三键。第二种为=SUM((C$18:C$28>=C18)*(MATCH(C$18:C$28,C$18:C$28,)=ROW($1:$11))),同样按三键。方法有很多,可以自己下载文件查看。

-03-

组内美式排名

组内美式排名,就是有好几个小组,在各自组内的美式排名。如下图所示。其实组内美式排名,也是在美式排名的基础上加个条件,就相当于多条件计数。比如AAA,她在2班的美式排名是第1名。公式为=COUNTIFS(B$33:B$43,B33,C$33:C$43,">"&C33)+1,第一个条件是2班,第二个条件是大于她自己的分数。合起来就是2班中大于她的分数的有几个,然后加+1。

-04-

组内中式排名

组内中式排名是在中式排名的基础上加条件。也可以说是在组内美式排名的基础上加个去重的条件。如下图所示。EEE在2班的中式排名是第3名。公式为=SUM((B$48:B$58=B48)*(C$48:C$58>=C48)/COUNTIFS(B$48:B$58,B$48:B$58,C$48:C$58,C$48:C$58)),按ctrl+shift+enter三键。其他公式自己下载文件查看。

链接:

https://pan.baidu.com/s/1_EX6PZvBRh5O3JY5veq5Ig

提取码:120j

(0)

相关推荐