ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 通用数组排序(支持二维或一维)

通用数组排序(支持二维或一维)

作者:绿色风 分类: 时间:2022-08-18 浏览:130
楼主
fāi

  1. '通用数组排序 - Array_Sort(支持二维或一维)---by fāi
  2. '正确定义数据类型---速度的前提  '数据类型 稍改 速度约3倍:Function Array_Sort(Array_&(), Key1&, Order&)
  3. '经本人测试 :二维数组时 冒泡法 并不比 桶排序 、选择排序 差
  4. Function Array_Sort(Array_, Key1, Order)    '(Array_[将要排序的数组], Key1[垂直数组(y,x)中x,像表格中的哪一列作关键字], Order[=1,升序;<>1,降序])
  5.     Dim t, x&, y&, i&, j&, k&, xx&, yy&, tt&, AD&
  6.     '以下的For…Next 是判断数组维数
  7.     For i = 1 To 60
  8.         On Error Resume Next
  9.         Err.Clear
  10.         tt = UBound(Array_, i)
  11.         If Err.Number = 9 Then AD = i - 1: Exit For    'AD,数组维数
  12.     Next
  13.     '以下的IF…Then…即若是一维通过转置为二维,若是二维以上则Exit Function
  14.     If AD = 2 Then
  15.         If Not (Key1 >= LBound(Array_, 2) And Key1 <= UBound(Array_, 2)) Then Exit Function
  16.     ElseIf AD = 1 Then
  17.         Array_ = Application.Transpose(Array_)
  18.         Key1 = 1
  19.     Else
  20.         Exit Function
  21.     End If
  22.     'UBound 函数与 LBound 函数一起使用,用来确定一个数组的大小。LBound 用来确定数组某一维的上界。UBound,其值为指定的数组维可用的最大下标。
  23.     y = LBound(Array_, 1): x = LBound(Array_, 2)
  24.     yy = UBound(Array_): xx = UBound(Array_, 2)
  25.     If Order = 1 Then    '升序
  26.         For i = y To yy - 1
  27.             For j = i + 1 To yy
  28.                 If Array_(j, Key1) < Array_(i, Key1) Then    '冒泡排序法
  29.                     For k = x To xx
  30.                         t = Array_(j, k): Array_(j, k) = Array_(i, k): Array_(i, k) = t
  31.                     Next
  32.                 End If
  33.             Next
  34.         Next
  35.     Else    '降序
  36.         For i = y To yy - 1
  37.             For j = i + 1 To yy
  38.                 If Array_(j, Key1) > Array_(i, Key1) Then
  39.                     For k = x To xx
  40.                         t = Array_(j, k): Array_(j, k) = Array_(i, k): Array_(i, k) = t
  41.                     Next
  42.                 End If
  43.             Next
  44.         Next
  45.     End If
  46.     If AD = 2 Then Array_Sort = Array_ Else Array_Sort = Application.Transpose(Array_)    '如果是一维数组,重新转置为原来…
  47. End Function



通用数组排序(支持二维或一维).rar
2楼
gouweicao78
建议楼主对这个东西作个说明,呵呵。
另,“支持二维”是啥意思,看不出“支持”与“二维”之间有什么并列关系。
3楼
fāi
谢谢gouweicao78版
简单修改
这个函数,并不能像excel原本的函数(可在单元格内使用)
4楼
398829134
谢谢楼主,我学习到了。

免责声明

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

评论列表
sitemap