依次按语文、数学、英语成绩降序排列姓名和总分
下图左表展示的是各位同学的语文、数学、英语成绩以及总成绩。现在的要求是:以语文为第一关键字,数学为第二关键字,英语为第三关键字,降序排列,得到新的姓名和总分的排列,结果如右表所示。
简单来说就是,先比较各位同学的语文成绩,语文成绩高的排在前面;如果语文成绩相同,再比较数学成绩,数学成绩高的排前面;如果语文数学成绩都相同,那么比较英语成绩,英语成绩高的排前面。
下面举两个例子:首先看第3行和第4行两人的成绩,第3行叶静芝的语文成绩大于第4行张君妍的语文成绩,所以叶静芝排在张君妍的前面。
再来看第14行和第15行两人的成绩,彭春婷和张杰良的语文成绩相同,都是77分,所以要比较数学成绩,彭春婷的数学成绩大于张杰良的,所以彭春婷排在张杰良的前面。
如果用基础操作来做,就是点三下降序排序。排序的顺序是先英语、再数学、最后语文。
说了这么多,大家应该明白题意了。那么用函数该如何完成呢?其实还是用到加权的方法,现在是语文的权重最高,数学次之,英语最低。选中G3:G15,在编辑栏输入下面的公式,按ctrl+shift+enter。
=INDEX(A:A,MOD(LARGE(MMULT(B3:D15,10^{8;5;2})+ROW(3:15),ROW()-2),100))
现在加权的列数比较多,有3列,可以用mmult来处理,也就是MMULT(B3:D15,10^{8;5;2})这部分,相当于B3:B15*10^8+C3:C15*10^5+D3:D15*10^2,结果如下图G列所示。
这里为什么要选10的8,5,2次方呢?因为每科成绩的最高分是100分,有3位数,要留出3个位置。那么三科成绩要留出9个位置,它们的分界点分别是10的6,3,0次方。
但是这三科成绩加权后还要加对应的行号,在加行号前还要扩大100倍,相当于再乘以10的2次方,所以最后是10的8,5,2次方。MMULT(B3:D15,10^{8;5;2})+ROW(3:15)这部分用mmult的结果加上对应的行号,结果如下图G列所示。
LARGE(MMULT(B3:D15,10^{8;5;2})+ROW(3:15),ROW()-2)这部分用large函数对上一步的结果降序排序,这样就符合了按三个关键字降序排序的要求。其中尾巴上的两位数是所在的行号,下一步就要提取出这些行号。
MOD(LARGE(MMULT(B3:D15,10^{8;5;2})+ROW(3:15),ROW()-2),100)这部分用mod函数除以100,取余数得到了对应的行号。当然也可以用right函数从右边截取2位得到行号。=INDEX(A:A,MOD(LARGE(MMULT(B3:D15,10^{8;5;2})+ROW(3:15),ROW()-2),100))这部分用index函数返回A列相应行的姓名。
得到了排好序的姓名,就可以根据姓名查找总分了。在H3单元格输入下面的公式,向下填充,完成。
=VLOOKUP(G3,A$3:E$15,5,0)
https://pan.baidu.com/s/1BHks7mWsSkxt2h9uladHyQ