【问题标题】:VBA: Sort array based on another arrayVBA:基于另一个数组对数组进行排序
【发布时间】:2015-04-28 15:35:44
【问题描述】:

我有几个非常长的数组,需要根据用户操作按字母顺序排序,但为简单起见,我将使用以下示例:

Dim Name as Variant, Street as Variant
Name = array("B", "C", "D", "A", "E")
Street = array("1", "2", "3", "4", "5")

用户点击排序按钮后,Name数组现在有如下顺序

("A", "B", "C", "D", "E")

然后我需要对Street数组进行排序,所以它得到了相应的顺序,即

("4", "1", "2", "3", "5")

在 VBA 中最有效的方法是什么?

请注意:我知道如何在 VBA 中正常对单个数组进行排序,我只是在寻找涉及基于另一个数组对数组进行排序的答案。谢谢。

【问题讨论】:

  • 为什么不是二维数组?你如何对一个普通的数组进行排序?你有一些代码吗?如果是这样,请您分享一下吗?
  • 在 VBA 中对数组进行排序几乎不是新闻,但既然你问了,我就使用 Chip Pearson 的优秀 qsort 算法,cpearson.com/excel/SortingArrays.aspx

标签: arrays vba sorting excel


【解决方案1】:

这似乎可以满足您的要求:

Sub MAIN()
    Dim Name(), Street()
    Name = Array("B", "C", "D", "A", "E")
    Street = Array("1", "2", "3", "4", "5")

    Call sort2(Name(), Street())

    For Each s In Street
        MsgBox s
    Next s
End Sub


Sub sort2(key() As Variant, other() As Variant)
Dim I As Long, J As Long, Low As Long
Dim Hi As Long, Temp As Variant
    Low = LBound(key)
    Hi = UBound(key)

    J = (Hi - Low + 1) \ 2
    Do While J > 0
        For I = Low To Hi - J
          If key(I) > key(I + J) Then
            Temp = key(I)
            key(I) = key(I + J)
            key(I + J) = Temp
            Temp = other(I)
            other(I) = other(I + J)
            other(I + J) = Temp
          End If
        Next I
        For I = Hi - J To Low Step -1
          If key(I) > key(I + J) Then
            Temp = key(I)
            key(I) = key(I + J)
            key(I + J) = Temp
            Temp = other(I)
            other(I) = other(I + J)
            other(I + J) = Temp
          End If
        Next I
        J = J \ 2
    Loop
End Sub

编辑#1:

要添加更多数组,只需将它们包含在标题中并插入更多行,例如:

            Temp = other2(I)
            other2(I) = other2(I + J)
            other2(I + J) = Temp

在排序例程中的两个位置。

【讨论】:

  • 看起来很有趣。我会测试并返回。
  • 效果很好,我会标记为已接受。您认为将其扩展为使用多个数组以仅基于一个排序的最简单方法是什么?
  • @Miqi180 ......如果我有很多数组,我会很想把它们塞进工作表的列中并使用 Excel 的本机排序。
  • 是的,这会使编码更容易,但我不能在这里这样做。我需要尽快对数组进行排序,并且即使您关闭屏幕更新,访问文档也会减慢速度。
  • @Miqi180 查看我的EDIT#1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 1970-01-01
  • 2020-09-27
  • 2015-03-03
相关资源
最近更新 更多