本帖最后由 一把小刀闯天下 于 2018-11-20 08:19 编辑
Option Explicit
Sub test()
Dim arr, i, j, k, t, a, b, brr
arr = [a2:g5].Value '普通行升序
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2) - 1
For k = j + 1 To UBound(arr, 2)
If arr(i, j) > arr(i, k) Then
t = arr(i, j): arr(i, j) = arr(i, k): arr(i, k) = t
End If
Next k, j, i
[i2].Resize(UBound(arr, 1), UBound(arr, 2)) = arr
arr = [a2:g5].Value '数组的奇偶列按行升序
brr = arr
b = UBound(brr, 2) + 1
For j = 1 To UBound(arr, 2) Step 2
a = a + 1: b = b - 1
For i = 1 To UBound(arr, 1)
brr(i, a) = arr(i, j)
If UBound(arr, 2) Mod 2 = 1 Then
If j + 1 < UBound(arr, 2) Then brr(i, b) = arr(i, j + 1) Else b = b - 1
Else
brr(i, b) = arr(i, j + 1)
End If
Next i, j
For i = 1 To UBound(brr, 1)
For j = 1 To a - 1
For k = j + 1 To a
If brr(i, j) > brr(i, k) Then
t = brr(i, j): brr(i, j) = brr(i, k): brr(i, k) = t
End If
Next k, j
For j = a + 1 To UBound(brr, 2) - 1
For k = j + 1 To UBound(brr, 2)
If brr(i, j) > brr(i, k) Then
t = brr(i, j): brr(i, j) = brr(i, k): brr(i, k) = t
End If
Next k, j, i
[q2].Resize(UBound(brr, 1), UBound(brr, 2)) = brr
arr = [a2:g5].Value '位数相加行排序
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2) - 1
For k = 1 To UBound(arr, 2) - j
If Len(arr(i, k)) = 2 Then
a = Val(Left(arr(i, k), 1)) + Val(Right(arr(i, k), 1))
Else
a = arr(i, k)
End If
If Len(arr(i, k + 1)) = 2 Then
b = Val(Left(arr(i, k + 1), 1)) + Val(Right(arr(i, k + 1), 1))
Else
b = arr(i, k + 1)
End If
If a > b Then
t = arr(i, k): arr(i, k) = arr(i, k + 1): arr(i, k + 1) = t
End If
Next k, j, i
[y2].Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub
|