ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: Zamyi

[原创] 二维数组排序,可与range.sort媲美

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-18 16:44 | 显示全部楼层
本帖已被收录到知识树中,索引项:排序
VBA万岁 发表于 2014-4-18 16:43
截图如下:
排序前:

附件如下:
多列列表框筛选排序.rar (24.35 KB, 下载次数: 232)

TA的精华主题

TA的得分主题

发表于 2014-4-18 17:03 | 显示全部楼层
VBA万岁 发表于 2014-4-18 16:43
截图如下:
排序前:

排序前截图:
多列列表框筛选排序——排序前.jpg

TA的精华主题

TA的得分主题

发表于 2014-9-18 14:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Zamyi大侠厉害,数组排序代码非常好用,学习了!

TA的精华主题

TA的得分主题

发表于 2014-11-23 21:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-4-10 16:59 | 显示全部楼层
附件最后一个下不来啊?

TA的精华主题

TA的得分主题

发表于 2015-4-10 17:19 | 显示全部楼层
老账号掉了,申请小号的感觉真不爽啊。要回贴升级哟

TA的精华主题

TA的得分主题

发表于 2015-4-10 17:20 | 显示全部楼层
继续顶,因为我就需要这个代码看一看,排序方法的源代码

TA的精华主题

TA的得分主题

发表于 2015-4-10 21:21 | 显示全部楼层
升级准备看一下源码,可惜作者没有放出来啊?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-11 08:43 | 显示全部楼层
wangfeng0918 发表于 2015-4-10 21:21
升级准备看一下源码,可惜作者没有放出来啊?

附件包里面有,直接贴个源码吧。不过里面的快排不好。
  1. Public Sub ZSort(Olda(), Newa(), ParamArray c())
  2. 'Olda():为排序数组
  3. 'Newa():为存放结果数组
  4. 'ParamArray c():传递排序参数数组,奇数个为排序列号,偶数为升降序,0或者省略为升序
  5. Dim P() As Long, w() As Long, B() As Boolean
  6. Dim i&, j&, k&, n1&, n2&, nb&, ne&
  7. k = UBound(c)
  8. If k = -1 Then
  9.   ReDim P(1)
  10.   P(0) = 1
  11. Else
  12.   If k Mod 2 Then ReDim P(k) Else ReDim P(k + 1)
  13.   For i = 0 To k
  14.     P(i) = c(i)
  15.   Next
  16. End If

  17. n1 = LBound(Olda)
  18. n2 = UBound(Olda)
  19. ReDim w(n1 To n2)
  20. ReDim B(n1 To n2)
  21. For i = n1 To n2
  22.   w(i) = i
  23. Next

  24. If P(1) = 0 Then QSort Olda, w, P(0), n1, n2 Else QSort2 Olda, w, P(0), n1, n2
  25. For i = 2 To k Step 2
  26.   nb = n1
  27.   ne = n1
  28.   While ne < n2
  29.     Do
  30.       ne = ne + 1
  31.       If ne > n2 Then Exit Do
  32.     Loop Until B(ne) Or Olda(w(ne), P(i - 2)) <> Olda(w(ne - 1), P(i - 2))
  33.     If ne - nb > 1 Then
  34.       If P(i + 1) = 0 Then QSort Olda, w, P(i), nb, ne - 1 Else QSort2 Olda, w, P(i), nb, ne - 1
  35.     End If
  36.     If ne <= n2 Then B(ne) = True
  37.     nb = ne
  38.   Wend
  39. Next

  40. For i = n1 To n2
  41.   For j = 1 To UBound(Newa, 2)
  42.     Newa(i, j) = Olda(w(i), j)
  43.   Next
  44. Next
  45. End Sub

  46. Private Sub QSort(R(), w() As Long, Key&, L&, H&)
  47. Dim i&, j&, x, y
  48. i = L
  49. j = H
  50. x = R(w(L + 1 + Int((H - L - 1) * Rnd)), Key)
  51. While (i <= j)
  52.   While (R(w(i), Key) < x And i < H)
  53.     i = i + 1
  54.   Wend
  55.   While (x < R(w(j), Key) And j > L)
  56.     j = j - 1
  57.   Wend
  58.   If (i <= j) Then
  59.     y = w(i)
  60.     w(i) = w(j)
  61.     w(j) = y
  62.     i = i + 1
  63.     j = j - 1
  64.   End If
  65. Wend
  66. If (L < j) Then QSort R, w, Key, L, j
  67. If (i < H) Then QSort R, w, Key, i, H
  68. End Sub
  69. Private Sub QSort2(R(), w() As Long, Key&, L&, H&)
  70. Dim i&, j&, x, y
  71. i = L
  72. j = H
  73. x = R(w(L + 1 + Int((H - L - 1) * Rnd)), Key)
  74. While (i <= j)
  75.   While (R(w(i), Key) > x And i < H)
  76.     i = i + 1
  77.   Wend
  78.   While (x > R(w(j), Key) And j > L)
  79.     j = j - 1
  80.   Wend
  81.   If (i <= j) Then
  82.     y = w(i)
  83.     w(i) = w(j)
  84.     w(j) = y
  85.     i = i + 1
  86.     j = j - 1
  87.   End If
  88. Wend
  89. If (L < j) Then QSort2 R, w, Key, L, j
  90. If (i < H) Then QSort2 R, w, Key, i, H
  91. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-4-11 09:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好东东,值得收藏,感谢分享。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 21:27 , Processed in 0.034113 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表