1、不改变数据位置进行排序的两种方法宝安中学初中部 熊伟以前,有位朋友问我,不改变数据位置怎么让名次自动显示出来?我说这个容易啊,等会我写好了就给你。这个用宏来做当然容易了,看这个数在这一列中排序第几,把序数写进名次那一列就行了。看下图:用 CTRM 作快捷键。再看一下宏代码:这是一个降序排列的宏,对于并列名次和空值也能很好地处理。写完之后,心里还沾沾自喜,认为自己对这个问题解决得很不错了。前两天在网上逛,看到了一个 Excel 函数,能很好地处理这个问题,才明白自己不过是只井底之蛙而已。看下图:函数名称:rank(Number,ref,order)它有三个参数:第一个参数 Number,就是要排
2、序的那个数字;第二个参数 Ref,就是要排序的数字在哪个范围内排序,所以它应该是一个数据范围;第三个参数 Order,是升序排列还是降序排列,如果为 0 或忽略,降序排列,为非 0,则升序排列。在上面在参数中,有一个特别要强调的参数 Ref,一般要排序的数据较多,我们会采用填充的方式把名次那一列填完,在下拉的过程中,地址范围有可能发生变化。上例中,如果这样写函数:=rank( B2,B2:B15,0)当你下拉填充的时候,下一个单元格就会变成:=rank(B3,B3:B16,0)这时候排序的范围发生变化,结果就不准确了。原因是 B2:B15 是一个相对引用,填充的时候地址范围就会自动产生变化。因此,参数 Ref 的地址范围应该中一个绝对引用的地址。把 B2:B15 改成$B$2:$B$15 ,当你填充的时候,地址就不会发生变化了。这个函数与我上面的宏比较起来,有一个缺点:不能对空值进行排序。上图的第 12 行,要排序的值显示的是#N/A,这就表示 rank()函数的第一个参数是不能为空值的。我想这一点对用户来说,应该不重要吧。