我有三个数组,DueDateArr,MilestoneDollarsArr,MilestoneNameArr。 我希望按时间顺序对DueDateArr进行排序,并使用相同的排序过程对其他数组进行相同的排序。我将How can I sort dates in an array in vba?与其他数组排序部分一起使用,但这似乎无法正常工作。在输出中,一切正常,除了第一个输入的日期错误。
或者,如果可能的话,我想使用它们在java中具有的链表之类的东西,它是具有不同变量类型的可排序多维数组。
Dim TotalCountMinusOneForArrays as Integer
Dim DueDateArr() As Date
Dim MilestoneDollarsArr() As Double
Dim MilestoneNameArr() As String
Dim DueDateValue As Date
Dim MilestoneNameValue As String
Dim DueDateInfo As Date
Dim MilestoneDollarsInfo As Double
Dim MilestoneNameInfo As String
Dim i As Long, j As Long
i = 0
j = 0
For j = 2 To TotalCountMinusOneForArrays
DueDateInfo = DueDateArr(j)
MilestoneDollarsInfo = MilestoneDollarsArr(j)
MilestoneNameInfo = MilestoneNameArr(j)
For i = j - 1 To 1 Step -1
If (DueDateArr(i) <= DueDateInfo) Then GoTo Sort
DueDateArr(i + 1) = DueDateArr(i)
MilestoneDollarsArr(i + 1) = MilestoneDollarsArr(i)
MilestoneNameArr(i + 1) = MilestoneNameArr(i)
Next i
i = 0
Sort: DueDateArr(i + 1) = DueDateInfo
MilestoneDollarsArr(i + 1) = MilestoneDollarsInfo
MilestoneNameArr(i + 1) = MilestoneNameInfo
Next j
答案 0 :(得分:0)
简单的方法是先使用内置的排序功能以编程方式对数据进行排序,然后填充数组。但是,如果这不是一种选择,则两个流行的解决方案是Bubble Sort或Merge Sort
气泡排序最容易应用:
Do Until bSort = False
bSort = False
For i = 0 to UBound(ArrToSort) - 1
If ArrToSort(i + 1) < ArrToSort(i) Then
tempVal = ArrToSort(i)
ArrToSort(i) = ArrToSort(i + 1)
ArrToSort(i + 1) = tempVal
bSort = True
End If
Next i
Loop
对于您的情况,如果您想进行多维操作而不是使用多个数组,则可以这样做
Do Until bSort = False
bSort = False
For i = 0 to UBound(ArrToSort) - 1
If CDate(ArrToSort(i + 1, 1)) < CDate(ArrToSort(i, 1)) Then
for i2 = 1 to 3
tempVal(1, i2) = ArrToSort(i, i2)
ArrToSort(i, i2) = ArrToSort(i + 1, i2)
ArrToSort(i + 1) = tempVal(1, i2)
next i2
bSort = True
End If
Next i
Loop
ArrToSort(i, 1)
是多维数组中的日期数据。
编辑:
值得一提的是,据我所知,除提供的方法外,没有 fast 在excel VBA中无法对数组进行排序的方法。
编辑2:
在冒泡排序中,在数组的日期值附近添加了CDate()
。