我根据是否满足工作表中的条件来填充数组。问题是,我不知道数组有多长,因为它可能比数据集本身更大(将有一些条目的重复)。我所拥有的是:
Sub ArrayTest
Dim MyArray as Variant
Dim i as Long
Dim index as Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).row
ReDim myarray(index)
For i = 1 to lastrow
If (something) then
index = index + 1
ReDim Preserve recordArrray(Index)
recordArrray(Index) = range("A" & i)
End If
Next
End Sub
但是,一旦index
到达lastrow
,我就会收到subscript out of range
错误。我可以通过简单地用ReDim
替换ReDim myarray(1 to 100000000).
行来避免这种情况。显然,这不是一个理想的解决方案。
我可以创建一个数组,而不必在创建之前定义上限吗?
答案 0 :(得分:0)
数组总是必须同时具有上限和下限(尽管您可以使用Redim
动态更改边界)。
我的猜测是,您遇到的问题是索引的起始值为0 ,这超出了数组的合法范围。我怀疑这可以解决眼前的问题:
Sub ArrayTest
Dim MyArray as Variant
Dim i as Long
dim index as Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).row
ReDim myarray(1 to lastrow)
For i = 1 to lastrow
If (something) then
index = index + 1
recordArrray(Index) = range("A" & i)
End If
Next
End Sub