以下是一个示例代码,演示如何使用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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录