我有一个数组,我在填充之前预先分配了一堆内存,一旦填充我想删除最后的空行,但是我得到一个错误。有没有使用第二个for循环的好方法的任何建议?
Dim myArray() as Variant
ReDim myArray( 1 to 800, 1 to 50)
For i = 1 to 800
' .....fill the array
Next i
然后下一个函数调用失败
ReDim Preserve myArray(1 to 50, 1 to 50)
错误消息:
"运行时错误' 9':
下标超出范围"
答案 0 :(得分:1)
您可以使用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
为了回避这个限制,你可以简单地创建一个新数组,适当地调整它,并使用第一个数组中的数据填充它。
以下是此示例:
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
答案 1 :(得分:0)
这不是你问题的正确答案,但是关于避免循环,你可以尝试这种方法
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