不用恳请,跟着我做一遍就是:
1、贴上标签
在D3单元格输入公式,在编辑栏选取如下部分,并按F9: =INDEX(A:A,MOD(LARGE(B$3:B$10*1000+ROW(B$3:B$10),ROW(1:1)),1000)) 显示为: =INDEX(A:A,MOD(LARGE({96003;98004;94005;97006;93007;95008;96009;98010},ROW(1:1)),1000)) 目的: 在成绩的后面加上行号,形成一组新的数值,相当于给每个成绩贴上了标签。
2、连根拨起
在上一步的基础上,按下面所示选取公式,并按F9:
=INDEX(A:A,MOD(LARGE({96003;98004;94005;97006;93007;95008;96009;98010},ROW(1:1)),1000))
显示为:
=INDEX(A:A,MOD({98010},1000)) ,它相当于:=INDEX(A:A,MOD(98010,1000))
这一步是取出这组数中第1大的数(因为第2个参数row(1:1)返回1) 这个第1大的数 98010 包含两个信息在里面:成绩是98,行号是10
3、撕下标签
接着前面的结果,继续运算下面选取部分: =INDEX(A:A,MOD({98010},1000)) 结果是: =INDEX(A:A,{10}) 第1大成绩所在行号是10,这正是我们要的东西。
4、对号入座
有了这个10,接下来就很好理解了,选取全部公式,按F9,结果自己看了: =Index(A:A,{10})
至此告一段落。
5、变通
如果把这公式往下拉,你会发现所得的结果并不是预想中的结果,相同分数的人,从后面开始取。 为什么呢?因为后面加了行号。成绩不相同的,保持原来的位置,但行号也是参与排序的一个因素,按从大到小的排列方法,相同的分数,谁后面加的数大,谁就排在前面。 行号小的,如果要排在前面,我们可以用另一种方法: 加上(1000-Row()),行号小的,加的数大,行号大的,加的数反而小。 第2行加998,第3行加997 到后面用Mod()取得值后,再用1000-Mod()还原成行号。
6、实践
把公式改为如下,再重新观察每步的计算过程,从这里开始:
D3=INDEX(A:A,1000-MOD(LARGE(B$3:B$10*1000+1000-ROW(B$3:B$10),ROW(1:1)),1000))
按F9是计算选取的分步公式,计算后,可以接着再选取,也可按Esc退出,重新选择其它公式,如第二步,也可以是这样:
D3=INDEX(A:A,1000-MOD(LARGE(B$3:B$10*1000+1000-ROW(B$3:B$10),ROW(1:1)),1000))
|