|
本帖最后由 leoxxx 于 2023-8-17 17:48 编辑
- Sub 工作表排序之冒泡法()
- Dim arr, temp, x, y, n As String
- ReDim arr(1 To Sheets.Count) '重新分配数组的存储空间
- For x = 1 To UBound(arr)
- arr(x) = Sheets(x).Name
- Next x
- For x = 1 To UBound(arr) - 1
- For y = x + 1 To UBound(arr)
- If arr(x) > arr(y) Then
- temp = arr(x)
- arr(x) = arr(y)
- arr(y) = temp
- '如果x大于y则互换位置。
- End If
- Next y
- Next x
- n = ActiveSheet.Name '获取当前表名
- For x = 1 To UBound(arr) - 1
- Sheets(arr(x)).Move before:=Sheets(arr(UBound(arr))) '移到数组上标之前
- Next x
- Sheets(n).Select
- End Sub
- Sub 工作表排序之选择法()
- Dim arr, temp, x, y, m As Integer, n As String
- ReDim arr(1 To Sheets.Count) '重新分配数组的存储空间
- For x = 1 To UBound(arr)
- arr(x) = Sheets(x).Name
- Next x
- For x = 1 To UBound(arr) - 1
- m = x '索引初始化
- For y = x + 1 To UBound(arr)
- If arr(m) > arr(y) Then m = y '查找最小索引。同行不用End If。
- Next y
- temp = arr(x)
- arr(x) = arr(m)
- arr(m) = temp
- '当前值与索引与互换位置
- Next x
- n = ActiveSheet.Name '获取当前表名
- For x = 1 To UBound(arr) - 1
- Sheets(arr(x)).Move before:=Sheets(arr(UBound(arr))) '移到数组上标之前
- Next x
- Sheets(n).Select
- End Sub
- Sub 工作表排序之插入法()
- Dim arr, temp, x, y, n As String
- ReDim arr(1 To Sheets.Count) '重新分配数组的存储空间
- For x = 1 To UBound(arr)
- arr(x) = Sheets(x).Name
- Next x
- For x = 2 To UBound(arr)
- temp = arr(x) '储存当前元素
- For y = x - 1 To 1 Step -1 '上一个元素到第一个元素,步进减1。
- If temp >= arr(y) Then Exit For '当前元素大于等于arr(y)则跳出本层For。
- arr(y + 1) = arr(y) '不满足条件则将arr(y + 1)赋值为arr(y)。
- Next y
- arr(y + 1) = temp '跳出For后执行。将arr(y + 1)赋值为当前元素。
- Next x
- n = ActiveSheet.Name '获取当前表名
- For x = 1 To UBound(arr) - 1
- Sheets(arr(x)).Move before:=Sheets(arr(UBound(arr))) '移到数组上标之前
- Next x
- Sheets(n).Select
- End Sub
- Sub 打乱顺序()
- Dim arr, arr1, i, r As Integer, k As Integer, n As String
- ReDim arr(1 To Sheets.Count), arr1(1 To Sheets.Count) '重新分配数组的存储空间
- For i = 1 To UBound(arr1)
- arr1(i) = Sheets(i).Name
- Next i
- k = UBound(arr)
- Randomize 'https://learn.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/randomize-statement
- For i = LBound(arr) To UBound(arr)
- r = Int((k - LBound(arr) + 1) * Rnd + LBound(arr)) 'https://learn.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/rnd-function
- arr(i) = arr1(r) '将arr1的随机值存储到arr
- arr1(r) = arr1(k)
- arr1(k) = arr(i) '与数组末位交换位置
- k = k - 1 '数组末位-1以避免重复取值
- Next i
- n = ActiveSheet.Name '获取当前表名
- For i = 1 To UBound(arr) - 1
- Sheets(arr(i)).Move before:=Sheets(arr(UBound(arr))) '移到数组上标之前
- Next i
- Sheets(n).Select
- End Sub
复制代码
|
|