使用按日期排序功能对多个数组进行排序

时间:2019-01-10 23:53:41

标签: vba sorting ms-access

我有三个数组,DueDateArr,MilestoneDollarsArr,MilestoneNameArr。 我希望按时间顺序对DueDateArr进行排序,并使用相同的排序过程对其他数组进行相同的排序。我将How can I sort dates in an array in vba?与其他数组排序部分一起使用,但这似乎无法正常工作。在输出中,一切正常,除了第一个输入的日期错误。

或者,如果可能的话,我想使用它们在java中具有的链表之类的东西,它是具有不同变量类型的可排序多维数组。

数据如下: Unsorted_Data 排序后的数据如下:(注意第一个输入不正确) Sorted_Results

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

1 个答案:

答案 0 :(得分:0)

简单的方法是先使用内置的排序功能以编程方式对数据进行排序,然后填充数组。但是,如果这不是一种选择,则两个流行的解决方案是Bubble SortMerge 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()