首页   

Excel宏VBA小技巧系列 | 整合排序

果汁焗酱油  ·  · 4 年前

上一篇笔记分段加合我们利用一段小程序求得了各部门的奖励系数总和:


接下来,我们把上面这张表(Sheet2)中的提交日发明部门总奖励系数的数据提取到另一张表(Sheet5)中:


设置整形变量n代表Sheet5的行,用整形变量m代表Sheet2的行。在m循环访问Sheet2的第2至24行、且当用Len函数判断 “总奖励系数” 一列中的数据不为空时,将Sheet2中的提交日、发明部门、总奖励系数这三列提取到Sheet5。



我们把Sheet5第1-3列的数据复制到第5-7列,以便按照总奖励系数降序的方式进行排列:


随后,我们设置整形变量x和y来代表行,再设置三个字符串变量float1、float2、float3用于在排序时分别 “寄存” 提交日、发明部门、总奖励系数的数据。

这个降序排列的过程还是比较实用的,思路是:从第x行开始,将第x行的总奖励系数与后面所有行(用y表示,从x+1行至末行)的总奖励系数进行比较,如果第x行的总奖励数据小于第y行的总奖励数据,则把两者进行交换,然后继续与剩下的行进行比较。这样运行的结果是,第x行的总奖励系数永远是从第x行到末行的总奖励系数里最大的。

此外,还需注意的是,在把第x行的数据与第y行的数据进行交换时,需要讲究一个顺序,即:先将第x行的对应数据赋给变量float暂存,随后将第y行的数据赋给第x行,最后再将在float中暂存的数据赋给第y行,由此达到“交换第x行与第y行的数据”的目的。

在经过降序排列后,我们就得到了按照总奖励系数降序排列的各发明部门的数据。


当然,这个例子的数据较少,如果数据量变大,我们只需要在降序排列过程中将“For x=2 To 6”中的6改为最后一行数据对应的行数,把“For y=x+1 To 7”中的7改为最后一行数据对应的行数加1的值即可。


下期预告: 如何利用Excel VBA实现名称标引

推荐文章
深圳特区报  ·  酒驾醉驾,有新规!  ·  5 月前  
良许Linux  ·  Linux下diff命令用法详解  ·  3 年前  
飞灵汽车  ·  传理想汽车赴美 IPO 估值 40 亿美元  ·  3 年前  
哈比足球  ·  【4月23~25日】珠海站 Level 1 ...  ·  6 年前  
© 2022 51好读
删除内容请联系邮箱 2879853325@qq.com