ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > 函数与公式 > 利用RANK进行加权排序的小技巧

利用RANK进行加权排序的小技巧

作者:绿色风 分类: 时间:2022-08-18 浏览:120
楼主
lrlxxqxa
先描述一下问题:求一个排列:从103行开始B103:I103列按从小到大的顺序排列,输出的是对应的B3:I3区域的号,B3:I3是从0到7,B103:I103里有相同的时,要求相同的数按B3:I3的顺序排出,如下图所示:


11.jpg  

解析一下思路:对于在一个区域中进行升序或者将序排列,我们都很熟悉了,用RANK函数可以轻松解决;但此实例中并不是返回B103:I103的顺序号,而是要求按照对应关系返回图中黄色区域(B3:I3)相对应的标识号,这就需要我们在排序时把二者联系起来;既加入黄色区域对应的标识又不影响原始区域内RANK的排序;下面分解来看:

1、因为要求是从小到大排列,所以用RANK($B103:$I103,$B103:$I103,1)求出每一个单元格在B103:I103中的顺序号,即{7,2,4,7,3,5,1,6};

2、观察黄色区域的{0,1,2,3,4,5,6,7}有何规律;发现与COLUMN($A:$H)构建出来的{1,2,3,4,5,6,7,8}依次相差1;

3、为了让COLUMN($A:$H)这个标志不影响主题顺序,缩小100倍,即加权为COLUMN($A:$H)%;

4、利用RANK($B103:$I103,$B103:$I103,1)+COLUMN($A:$H)%进行排序,即加权后变为{7.01,2.02,4.03,7.04,3.05,5.06,1.07,6.08};

5、要从小到大一次输入,很自然想到SMALL函数,于是在横向单元格区域中应以SMALL({7.01,2.02,4.03,7.04,3.05,5.06,1.07,6.08},1)、SMALL({7.01,2.02,4.03,7.04,3.05,5.06,1.07,6.08},2)以此类推,即公式中的SMALL(RANK($B103:$I103,$B103:$I103,1)+COLUMN($A:$H)%,J$3+1)部分;

6、最后需要排序完成后在横向的单元格区域中已经是由小到大排列了,但需要我们提取出黄色区域的标识;即小数点后第二位的加权标志;

7、因为在SMALL部分的J$3+1可以看出,加权标志是比实际的黄色区域内的对应值大1的,所以最后提取时要再减去,即RIGHT(SMALL(RANK($B103:$I103,$B103:$I103,1)+COLUMN($A:$H)%,J$3+1))-1

完整数组公式为:
  1. =RIGHT(SMALL(RANK($B103:$I103,$B103:$I103,1)+COLUMN($A:$H)%,J$3+1))-1
2楼
亡者天下
加权排序,一个新概念啊!
3楼
poiuyman5
Good

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap