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

自编的数组排序的程序

作者:绿色风 分类: 时间:2022-08-18 浏览:97
楼主
xyh9999
  1. Public Function Lqc_Array_Sort(Array_, Key1, Order)    '(Array_[将要排序的数组], Key1[垂直数组(y,x)中x,像表格中的第Key1列作关键字], Order[=1,升序;<>1,降序])
  2. '李秋才注:本函数为自编函数,运行速度非常快!
  3. '以下的For…Next 是判断数组维数
  4.     hhhh1 = 1: hhhh2 = 1: llll1 = 1: llll2 = 1
  5.     For iii = 1 To 4
  6.         On Error Resume Next
  7.         Err.Clear
  8.         tt = UBound(Array_, iii)
  9.         If Err.Number = 9 Then AD = iii - 1: Exit For    'AD,数组维数
  10.     Next
  11.     On Error GoTo 0
  12.     '-------------------------------
  13.     '以下的IF…Then…即若是一维通过转置为二维,若是二维以上则Exit Function
  14.     If AD = 2 Then
  15.         If Not (Key1 >= 1 And Key1 <= UBound(Array_, 2) - LBound(Array_, 2) + 1) Then Exit Function
  16.         hhhh1 = LBound(Array_, 1)
  17.         hhhh2 = UBound(Array_, 1)
  18.         llll1 = LBound(Array_, 2)
  19.         llll2 = UBound(Array_, 2)
  20.     ElseIf AD = 1 Then
  21.         hhhh1 = LBound(Array_, 1)
  22.         hhhh2 = UBound(Array_, 1)
  23.         Array_ = Application.Transpose(Array_)
  24.         Key1 = 1
  25.         llll1 = 1
  26.         llll2 = 1
  27.     Else
  28.         Exit Function
  29.     End If
  30.     '-------------------------------
  31.     ls_arr_nam0 = ActiveSheet.Name
  32.     ls_arr_nam = Format(Now, "MMDDHHMMSS") & Format(Round(Rnd() * 100000, 0), "000000")
  33.     With ThisWorkbook.Sheets.Add
  34.         .Name = ls_arr_nam
  35.     End With
  36.     ThisWorkbook.Sheets(ls_arr_nam0).Activate
  37.     ThisWorkbook.Sheets(ls_arr_nam).Cells.ClearContents
  38.     ThisWorkbook.Sheets(ls_arr_nam).Cells(1, 1).Resize(hhhh2 - hhhh1 + 1, llll2 - llll1 + 1).Value = Array_
  39.     If Order = 1 Then
  40.         ThisWorkbook.Sheets(ls_arr_nam).Cells(1, 1).Resize(hhhh2 - hhhh1 + 1, llll2 - llll1 + 1).Sort Key1:=ThisWorkbook.Sheets(ls_arr_nam).Cells(1, Key1), Order1:=xlAscending, Header:=xlGuess, _
  41.                                                                                                       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
  42.                                                                                                                                                                     :=xlPinYin, DataOption1:=xlSortNormal
  43.     Else
  44.         ThisWorkbook.Sheets(ls_arr_nam).Cells(1, 1).Resize(hhhh2 - hhhh1 + 1, llll2 - llll1 + 1).Sort Key1:=ThisWorkbook.Sheets(ls_arr_nam).Cells(1, Key1), Order1:=xlDescending, Header:=xlGuess, _
  45.                                                                                                       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
  46.                                                                                                                                                                     :=xlPinYin, DataOption1:=xlSortNormal
  47.     End If
  48.     If hhhh1 = 1 And llll1 = 1 Then
  49.         ReDim Lqc_Array_SortX(hhhh1 To hhhh2, llll1 To llll2) As Variant
  50.         Lqc_Array_SortX = ThisWorkbook.Sheets(ls_arr_nam).Cells(1, 1).Resize(hhhh2 - hhhh1 + 1, llll2 - llll1 + 1).Value
  51.         Lqc_Array_Sort = Lqc_Array_SortX
  52.     Else
  53.         If AD = 2 Then
  54.             Lqc_Array_Sort_ls = ThisWorkbook.Sheets(ls_arr_nam).Cells(1, 1).Resize(hhhh2 - hhhh1 + 1, llll2 - llll1 + 1).Value
  55.             ReDim Lqc_Array_SortX(hhhh1 To hhhh2, llll1 To llll2) As Variant
  56.             For i = hhhh1 To hhhh2
  57.                 For j = llll1 To llll2
  58.                     Let Lqc_Array_SortX(i, j) = Lqc_Array_Sort_ls(i - hhhh1 + 1, j - llll1 + 1)
  59.                 Next j
  60.             Next i
  61.             Lqc_Array_Sort = Lqc_Array_SortX
  62.         Else
  63.             If AD = 1 Then
  64.                 Lqc_Array_Sort_ls = Application.Transpose(ThisWorkbook.Sheets(ls_arr_nam).Cells(1, 1).Resize(hhhh2 - hhhh1 + 1, llll2 - llll1 + 1).Value)
  65.                 ReDim Lqc_Array_SortY(hhhh1 To hhhh2) As Variant
  66.                 For i = hhhh1 To hhhh2
  67.                     Let Lqc_Array_SortY(i) = Lqc_Array_Sort_ls(i - hhhh1 + 1)
  68.                 Next i
  69.                 Lqc_Array_Sort = Lqc_Array_SortY
  70.             End If
  71.         End If
  72.     End If
  73.     Application.DisplayAlerts = False    '不进行提示
  74.     ThisWorkbook.Sheets(ls_arr_nam).Delete
  75.     Application.DisplayAlerts = True    '进行提示
  76. End Function
2楼
kevinchengcw
坐沙发,看好帖

免责声明

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

评论列表
sitemap