Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VBA:基于另一个数组对数组进行排序_Arrays_Vba_Sorting_Excel - Fatal编程技术网

Arrays VBA:基于另一个数组对数组进行排序

Arrays VBA:基于另一个数组对数组进行排序,arrays,vba,sorting,excel,Arrays,Vba,Sorting,Excel,我有几个很长的数组,需要根据用户操作按字母顺序排序,但为了简单起见,我将使用以下示例: Dim Name as Variant, Street as Variant Name = array("B", "C", "D", "A", "E") Street = array("1", "2", "3", "4", "5") 用户单击排序按钮后,名称数组现在具有以下顺序 ("A", "B", "C", "D", "E") 然后我需要对Street数组进行排序,这样它就得到了相应的顺序,即 ("4"

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

Dim Name as Variant, Street as Variant
Name = array("B", "C", "D", "A", "E")
Street = array("1", "2", "3", "4", "5")
用户单击排序按钮后,
名称
数组现在具有以下顺序

("A", "B", "C", "D", "E")
然后我需要对
Street
数组进行排序,这样它就得到了相应的顺序,即

("4", "1", "2", "3", "5")
在VBA中,最有效的方法是什么?


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

这似乎是您想要的:

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

中,两个都位于排序例程中。

为什么不使用2D数组?如何对普通数组进行排序?你有一些代码可以做到这一点吗?如果是这样的话,你能分享一下吗?在VBA中对数组进行排序不是什么新鲜事,但是既然你问了,我使用了Chip Pearson的优秀qsort算法,看起来很有趣。我会测试然后回来。效果很好,我会标记为已接受。如果我有很多数组,我会很想把它们塞进工作表的列中,并使用Excel的原生排序。是的,这会使编码更容易,但我在这里做不到。我需要尽快对数组进行排序,即使关闭屏幕更新,访问文档也会减慢速度。@Miqi180请参阅我的编辑#1