在学校工作,要用EXCEL对学生的成绩进行名次计算。但是出现了一些问题,最后使用了比较麻烦的方法才把名次算出来。下面讲一下过程。
首先成绩表是这样的:
一、rank函数
第一个想到的方法是使用EXCEL中自带的rank函数。rank函数可以计算出单元格在某数列中的排名。函数编辑好之后对名次列(G列)进行公式填充。
使用rank函数后的效果,红框中代表的是函数:
但是我们如果对名次进行一个排序。就发现结果很奇怪,如图所示:
再仔细看编辑栏中的函数,就发现问题所在。原来在使用rank函数进行填充的时候函数中的数据列也跟着改变。
这个问题比较好解决,将函数中的相对引用转化成绝对引用就可以了(更改方法即是在行列中间插入一个"$"符号,例如A3更改为A$3),更改好了以后的图:
到这里笔者认为已经达成目标了,但是对名次列进行排序后又出现问题了:
注意红框中的内容,有两个同学并列第八名,但是往下就没有了第九名,直接到了第十名,并且只要有成绩并列的名次都出现了相同的问题。
可能rank函数不适用多个数值的排名。于是放弃rank函数,重新思考。
二、if函数+选择性粘贴
既然rank函数失败了,那么就转向新的思考方向。新办法的思路是这样:
1.对总成绩进行降序排序,并且确定第一名。
2.使用if函数,以总成绩第二名的同学为例。
⑴如果第二名同学的成绩比第一名同学的成绩小,那么第二名同学的名次就等于第一名同学的名次再加一。
⑵如果第二名同学的成绩不比第一名同学的成绩小,那么第二名同学的名次就等于第一名同学的名次。
3.以学号列为主要关键字进行排序,恢复表格的原始顺序。
1.对总成绩进行降序排列,在成绩最高的同学名次单元格上输入1:
2.在第二名同学的名次单元格中输入if函数,if(F3