用函数实现排序的效果(升序排序)
小伙伴们好,今天要分享的内容是如何用函数实现排序的效果。先来看下数据源和排序后的效果。下图左表是数据源,分数以乱序排序。右表是以分数为关键字升序排序后的效果。
如何用函数来实现呢?在E2单元格输入公式=INDEX(A:A,MOD(SMALL($B$2:$B$13/1%+ROW($2:$13),ROW(A1)),100)),按ctrl+shift+enter三键结束,右拉下拉填充,完成。这个公式和昨天的思路是差不多的。主要是用到分数和行号的加权合并。
=$B$2:$B$13/1%+ROW($2:$13)这部分就是用分数除以百分之一,再加上对应的行号,结果如C列所示。返回的结果把分数和行号合并起来,对于分数不相同的,合并后的结果没有改变原来分数的大小顺序。比如80小于85,合并后的8002同样小于8503。对于分数相同的,结果会有所不同,但会按先后顺序排列,比如有2个85,第1个返回8503,第2个返回8510。
=SMALL($B$2:$B$13/1%+ROW($2:$13),ROW(A1))这部分用small提取上一步结果的第1个最小值512,公式下拉提取第2个最小值1108,以此类推,返回的结果如下图D列所示。512的意思是分数5在12行。这样的话就实现了分数从小到大的排列顺序。
=MOD(SMALL($B$2:$B$13/1%+ROW($2:$13),ROW(A1)),100)这部分用mod对上一步的结果除以100求余数,就得到了对应的行号。如下图E列所示。因为我们之前合并分数和行号的时候,对分数乘以100,所以现在用mod除以100。
=INDEX(A:A,MOD(SMALL($B$2:$B$13/1%+ROW($2:$13),ROW(A1)),100))这部分就是用index返回对应行号的内容,结果如下图E列所示。
运用加权的方式把行号和其他列数字合并起来很有用,可以实现意想不到的效果。下面来个不用按三键的公式=INDEX(A:A,MOD(SMALL(MMULT($B$2:$B$13/1%+ROW($2:$13),1),ROW(A1)),100)),右拉下拉完成。主要是加了个mmult。
如果你有其他的方法,欢迎在留言区写出你的答案,让我们一起学习。
文件链接:
https://pan.baidu.com/s/1x4J4ytwoLatjS9qkewiqMg
提取码:bsy4