VBA中的锯齿状阵列

Mat*_*att 0 excel vba jagged-arrays excel-vba

所以我想创建一个数组数组,从我收集的数据中,我需要一个锯齿状数组.

我有一个数组x(i,j),它定义了一个整数的正方形nxn矩阵.对于k的每次迭代,交换该数组内的两个整数值以尝试并更好地使用矩阵x(i,j).我需要创建一个数组,在每次k次迭代后存储这个矩阵x(i,j).

澄清一下,说我有没有

1  2  3
4  5  6
7  8  9
Run Code Online (Sandbox Code Playgroud)

我执行迭代交换数组中的两个元素:

7  2  3
4  5  6
1  8  9
Run Code Online (Sandbox Code Playgroud)

我希望能够将这些数组存储在数组中,以便随时调用.我试过这里的解决方案:

Dim y() As Variant 'Declare as a variant to contain arrays
ReDim y(1 To IterationLimit) 'This will be the jagged array

For k = 1 To IterationLimit
'Some code goes here for the swap
    y(k) = x(i,j)
next k
Run Code Online (Sandbox Code Playgroud)

现在说我想要第85次迭代.我希望能够输入y(85)[或类似]来拉出特定时间的矩阵x(i,j).

希望我已经足够好地解释了这一点.感谢任何帮助,我真的坚持这一点.

编辑:删除的代码

Dav*_*ens 5

好.我想你可能根本就没有y正确地分配数组.正如我在评论中提到的:

y(k) = x(i,j)存储由I表示的值/ J坐标中x阵列.

为了在那时y(k)引用整个数组x,你可以这样做:

y(k) = x

如果仍然没有运作,那么其他可能是不正确的.这是一个例子,我有一个2x2(基数0)数组baseArray,我明确填充了一些值.我迭代i = 0 to itLimit,并在每次迭代中,迭代数组中的项,将值乘以2,并存储在数组变量中tmpArray.在转换值之后,我将它们存储在中arrContainer,然后继续下For i = 0 to itLimit一次迭代.

Sub FunWithArrays()
Dim itLimit As Integer  '## Iteration limit.'
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim baseArray(2, 2) As Variant '## an example array.'

    '## Put some dummy data in this array.'
    baseArray(0, 0) = 1
    baseArray(0, 1) = 65
    baseArray(0, 2) = 13
    baseArray(1, 0) = 14
    baseArray(1, 1) = 29
    baseArray(1, 2) = 44
    baseArray(2, 0) = 9
    baseArray(2, 1) = 16
    baseArray(2, 2) = 33

Dim tmpArray(2, 2) As Variant '## This will temporarily hold values as we transform them.'
Dim arrContainer() As Variant '## an array of arrays, to store the iteration arrays.'

    itLimit = 2  '## set a max iteration.'

    For i = 0 To itLimit
        '## Transform the base array somehow'
        For j = LBound(baseArray, 1) To UBound(baseArray, 1)
            For k = LBound(baseArray, 2) To UBound(baseArray, 2)
                tmpArray(j, k) = baseArray(j, k) * 2
            Next
        Next
        ReDim Preserve arrContainer(i)
        arrContainer(i) = tmpArray
    Next

    Dim y As Variant
    '## Now, refer to a single iteration stored in the arrContainer variable:

    y = arrContainer(2)

End Sub
Run Code Online (Sandbox Code Playgroud)

在第一个屏幕截图中,我使用Locals窗口来查看变量及其包含的内容.在第一次迭代之后,您可以看到tmpArray已填充的尺寸与尺寸相同baseArray,但其中的值已乘以2.

第一次迭代后的屏幕截图

检查arrContainer变量,我们看到它只有1个项目,该项目是一个等于tmpArray我们在上面的迭代中创建的数组.

第一次迭代后arrContainer的屏幕截图

在最后一次迭代之后,我们可以查看arrContainer并查看它包含3个项目(每个For i to itLimit循环0到2 ).内部的每个数组arrContainer都等于上面迭代中创建的一个数组.

所有迭代后arrContainer数组数组的屏幕截图

我们现在可以参考这些项目,例如:

Dim y as Variant y = arrContainer(2) '# or any in bounds index could be used instead of "2"'

最后使用VBE Locals窗口查看y:

最终屏幕截图引用arrContainer中的单个数组项