在阵列中存储数组

时间:2013-08-30 17:34:01

标签: excel vba excel-vba

在Excel VBA中,有没有办法将数组存储在另一个数组中?例如,如果我创建了一个名为“World”的一维数组和具有各种名称的二维数组,是否可以将每个2D数组存储到“World”的每个项目中(不管数组“World”可能是多长的) )?如果是这样,我怎么能这样做,以及如何在“世界”中引用2D数组中的项目?

我应该考虑使用对象和/或类吗?你是怎么做到的,或者你有一个好地方可以参考我?我一直在网上寻找一段时间,但还没有找到解决方案。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

在我看来,我会使用一个集合。然后,您可以拥有集合的集合。收藏很好,因为你可以引用“密钥”并得到相应的值......

   Public Function MultiDimensionalCollection() as Collection
       Dim tempColl as Collection
       Set MultiDimensionalCollection = new Collection

       For i = 1 to 100
           Set tempColl = New Collection
           tempColl.Add "Value", "Key-" & i 
           tempColl.Add "Value2", "Key2-" & i
           tempColl.Add "Value3", "Key3-" & i
           MultiDimensionalCollection.Add tempColl, "Key-" & i
       Next i

   End Function

显然,您可以用任何东西(对象,范围值等)填充它们。只要确保你没有复制“KEY”值,否则你会收到错误。如果您需要示例代码来填充范围或记录集或任何您想要的内容,请告诉我。谢谢,Brian。

答案 1 :(得分:0)

您可能可以使用3d数组,或者称为 Jagged Array (或数组数组)

Sub ThreeDArray()
    Dim World() As String ' or type of your choice

    ReDim World(0 To 4, 1 To 3, 1 To 2)

    World(5, 1, 2) = "a"
    Debug.Print World(5, 1, 2)
End Sub

Sub JaggedArray()
    Dim World() As Variant
    Dim MyArray() As String ' or type of your choice
    Dim i As Long, j As Long

    ' If all elements of World are the same size
    ReDim World(0 To 9)
    ReDim MyArray(1 To 2, 1 To 3)
    For i = LBound(World) To UBound(World)
        World(i) = MyArray
    Next

    ' Or, if each element of World is different size
    ReDim World(0 To 9)
    For i = LBound(World) To UBound(World)
        ReDim MyArray(0 To i, 0 To (i + 1) * 2)
        World(i) = MyArray
    Next

    ' to access elements
    World(5)(1, 2) = "a"
    Debug.Print World(5)(1, 2)
End Sub