VBA 二维数组多条件排序
以下是一个示例代码,演示如何使用VBA对二维数组进行多条件排序:
Sub MultiSort()
'定义二维数组
Dim arrData(1 To 5, 1 To 4) As Variant
'填充数据
arrData(1, 1) = "John": arrData(1, 2) = "Smith": arrData(1, 3) = 25: arrData(1, 4) = 80
arrData(2, 1) = "Mary": arrData(2, 2) = "Johnson": arrData(2, 3) = 35: arrData(2, 4) = 90
arrData(3, 1) = "Bob": arrData(3, 2) = "Williams": arrData(3, 3) = 20: arrData(3, 4) = 70
arrData(4, 1) = "Jane": arrData(4, 2) = "Wilson": arrData(4, 3) = 30: arrData(4, 4) = 85
arrData(5, 1) = "Tom": arrData(5, 2) = "Brown": arrData(5, 3) = 25: arrData(5, 4) = 75
'定义排序条件
Dim sort1 As Integer: sort1 = 3 '按年龄排序
Dim sort2 As Integer: sort2 = 4 '按分数排序
'定义变量
Dim i As Integer
Dim j As Integer
Dim temp As Variant
'冒泡排序
For i = LBound(arrData, 1) To UBound(arrData, 1) - 1
For j = LBound(arrData, 1) To UBound(arrData, 1) - i - 1
If arrData(j, sort1) > arrData(j + 1, sort1) Then
'交换位置
temp = arrData(j, 1)
arrData(j, 1) = arrData(j + 1, 1)
arrData(j + 1, 1) = temp
temp = arrData(j, 2)
arrData(j, 2) = arrData(j + 1, 2)
arrData(j + 1, 2) = temp
temp = arrData(j, 3)
arrData(j, 3) = arrData(j + 1, 3)
arrData(j + 1, 3) = temp
temp = arrData(j, 4)
arrData(j, 4) = arrData(j + 1, 4)
arrData(j + 1, 4) = temp
ElseIf arrData(j, sort1) = arrData(j + 1, sort1) And arrData(j, sort2) > arrData(j + 1, sort2) Then
'交换位置
temp = arrData(j, 1)
arrData(j, 1) = arrData(j + 1, 1)
arrData(j + 1, 1) = temp
temp = arrData(j, 2)
arrData(j, 2) = arrData(j + 1, 2)
arrData(j + 1, 2) = temp
temp = arrData(j, 3)
arrData(j, 3) = arrData(j + 1, 3)
arrData(j + 1, 3) = temp
temp = arrData(j, 4)
arrData(j, 4) = arrData(j + 1, 4)
arrData(j + 1, 4) = temp
End If
Next j
Next i
'输出结果
For i = LBound(arrData, 1) To UBound(arrData, 1)
Debug.Print arrData(i, 1) & " " & arrData(i, 2) & " " & arrData(i, 3) & " " & arrData(i, 4)
Next i
End Sub
上述代码定义了一个二维数组arrData,并填充了一些数据。然后定义了两个排序条件sort1和sort2,分别代表按年龄和分数进行排序。接下来使用冒泡排序对数组进行排序,如果第一个排序条件相同,则按第二个排序条件进行排序。最后输出排序结果。
原文地址: https://www.cveoy.top/t/topic/wKz 著作权归作者所有。请勿转载和采集!