Excel Sort的多key稳定排序算法,你了解的有多少方法?

  一般说,由Excel中的单元格区域数据对象构成的二维数组,可以直接使用工作表排序方法。

  不仅速度快,而且无需读入、写出操作。

  但是,默认工作表排序方法一次只能使用3个key、所以如果有较多key需要排序时,

  可以使用VBA循环代码,一次排1列,逆序循环排序后得到结果。

  PS:注意必须逆序操作,即、权重最小的列第1个排序,而权重最大的列必须最后一个排序。这个和我们通常的习惯是相反的,需要注意。

  示例代码如下:

  Sub test1() Dim ar, sr, sr2, i&, j&, tms#

  '假设待排序原始数据是在A1开始的多行、7列区域中 sr=Array(1, 3, 5, 7) '需要排序的列的权重顺序 sr2=Array(1, 2, 2, 1) '需要排序的列的升降顺序(1为升序、2为降序) Application.ScreenUpdating=False '禁止刷屏 For j=UBound(sr) To 0 Step -1 '逆序循环 [a1].Sort [a1].Offset(, sr(j) - 1), sr2(j) '每次排序1列 Next Application.ScreenUpdating=True End Sub

  但是,如果是VBA过程中生成的VBA内存二维数组需要排序,那么用工作表排序方法就比较麻烦,需要先把二维数组写入工作表,然后排序,然后再读入VBA……

  另外,如果是超过65536行甚至几十万、几百万的数据需要排序,

  那工作表方法就不能用了,读写数据就需大量时间。

  因此,虽然不是很常用,但还是需要一种直接对VBA内存数组进行排序的算法。

  VBA排序算法有很多,但基本上都是一维数组排序。

  即使简单改写一下能用于二维数组,但对于稳定的多key排序,就无法解决。

  因为,稳定排序的冒泡算法速度非常之慢,而速度较快的快速排序是不稳定排序算法,

  所以多key排序的结果就会出错。

  小伙伴,大家一起学习Excel VBA知识,一起进步。同时欢迎大家帮忙转发并关注,谢谢大家的支持!

上一篇:关于linux下DB2创建数据库报错问题


下一篇:三星想抢苹果芯片订单?台积电表示想多了