【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《Excel不改变数据位置进行排序的两种方法》,欢迎阅读!
不改变数据位置进行排序的两种方法
宝安中学初中部 熊伟
以前,有位朋友问我,不改变数据位置怎么让名次自动显示出来?我说这个容易啊,等会我写好了就给你。
这个用宏来做当然容易了,看这个数在这一列中排序第几,把序数写进名次那一列就行了。
看下图:
用CTR+M作快捷键。再看一下宏代码:
这是一个降序排列的宏,对于并列名次和空值也能很好地处理。
写完之后,心里还沾沾自喜,认为自己对这个问题解决得很不错了。
前两天在网上逛,看到了一个Excel函数,能很好地处理这个问题,才明白自己不过是只井底之蛙而已。
看下图:
函数名称:rank(Number,ref,order) 它有三个参数:
第一个参数Number,就是要排序的那个数字;第二个参数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()函数的第一个参数是不能为空值的。我想这一点对用户来说,应该不重要吧。
本文来源:https://www.wddqxz.cn/3ff00aed88d63186bceb19e8b8f67c1cfad6ee0c.html