是否有可能截断VBA中的multidimensional array保存已经包含在其中的数据?

我有一个数组,我预先分配一堆内存之前填充,一旦填充我想删除最后的空行,但是我得到一个错误。 任何build议一个好的方法来做到这一点,而不使用第二个循环?

Dim myArray() as Variant ReDim myArray( 1 to 800, 1 to 50) For i = 1 to 800 ' .....fill the array Next i 

然后下一个function调用失败

 ReDim Preserve myArray(1 to 50, 1 to 50) 

与错误消息:

“运行时错误”9“:

下标超出范围“

您可以使用Redim Preserve来重新排列数组。 但是,这只适用于数组的最后一个维度。 这里做一个redim保存的一个简单的例子:

 Sub Test() Dim arrMy() ReDim arrMy(1 To 10, 1 To 10) Dim i, j For i = 1 To 10 For j = 1 To 10 arrMy(i, j) = 1 Next j Next i ReDim Preserve arrMy(1 To 10, 1 To 1) End Sub 

为了避开这个限制,你可以简单地创build一个新的数组,适当地调整它的大小,然后用第一个数组中的数据填充它。

这是一个例子:

 Sub Test2() Dim arrMy() ReDim arrMy(1 To 10, 1 To 10) Dim i, j For i = 1 To 10 For j = 1 To 10 arrMy(i, j) = 1 Next j Next i Dim arrFinal() ReDim arrFinal(1 To 2, 1 To 10) For i = 1 To 2 For j = 1 To 10 arrFinal(i, j) = arrMy(i, j) arrFinal(i, j) = arrMy(i, j) arrFinal(i, 2) = arrMy(i, j) Next j Next i End Sub 

这不是你的问题的正确答案,但是为了避免循环,你可以尝试这种方法

 Sub Test2() Dim arrMy() ReDim arrMy(1 To 5, 1 To 5) Dim i, j For i = 1 To 5 For j = 1 To 5 arrMy(i, j) = i * j Next j Next i Range("A1").Resize(5, 5) = arrMy Dim arrFinal() ReDim arrFinal(1 To 2, 1 To 5) arrFinal = Application.Index(arrMy, Evaluate("ROW(1:2)"), Array(1, 2, 3, 4, 5)) Range("H1").Resize(2, 5) = arrFinal End Sub