排序技巧1:按分数从高到低的顺序排列姓名

下图左表记录的是10名考生的成绩,为了更好的展示名次,现需要按成绩从高到低的顺序排列姓名,结果如右表所示。

如果有多人的成绩是相同的,那么按顺序依次排列。比如序号1的“彭勇山”和序号8的“朱丽”都是93分,按从上到下的顺序依次排列。

如果用基础操作来做,很简单,就是一个排序。选中C3单元格,点【数据】-【排序】-【降序排序】。

那如何用函数来完成呢?还是需要一些技巧和方法的。在E3单元格输入下面的公式,按ctrl+shift+enter,向右向下填充。

=INDEX(A:A,RIGHT(SMALL(RANK($C$3:$C$12,$C$3:$C$12)/1%+ROW($3:$12),ROW()-2),2))

RANK($C$3:$C$12,$C$3:$C$12)这部分用rank函数计算出这10个考生成绩的降序排名,结果如下图E列所示。可以看到100分对应的名次是1,98分对应的名次是2,两个93分对应的名次是3,等等。

RANK($C$3:$C$12,$C$3:$C$12)/1%+ROW($3:$12)这部分用上一步rank的结果乘以100,再加上对应的行号,是加权的处理方式。最后的结果如下图G列所示,F列是计算过程。

分数100通过加权处理后得到的结果是105,这个105代表对应的分数是第1名,且在第5行。另外,两个93分加权处理后的结果分别为303和310,都是第3名,一个在第3行,一个在第10行。这对下一步的提取有用。

接下来用small函数从上一步加权处理后的结果中由小到大依次提取每个值,结果如下图G列所示。名次按第1,2,3···10名排列;且名次相同时,也就是成绩相同时,按从上到下的顺序依次排列,还是看两个93分对应的加权数,先排303,再排310。

再下来用right从上一步的结果中截取右边2位,得到了各名次对应的行号,如下图H列所示。最后用index返回A、B、C列相应行的内容。

完整的思路是:先用rank计算出所有成绩的降序排名,然后将排名和行号结合,用small对其排序,再用right从排好序的结果中取出行号,最后用index返回对应的内容。你也可以想想其他的方法。
(0)

相关推荐