我如何填充一个dynamic的2D数组?

为什么这样做:

Dim Arr As Variant p = 1 For i = 1 To LRow If Sheets("Data").Range("U" & 4 + i).Value > 0 Then ReDim Preserve Arr(1 To p, 1 To 2) Arr(p, 1) = Sheets("Data").Range("U" & 4 + i).Value Arr(p, 2) = Sheets("Data").Range("N" & 4 + i).Value p = p + 1 End If Next 

导致ReDim行的“运行时错误9 – 下标超出范围”? 进入for循环之前我不知道数组的行数。 列号应该始终是2.做同样的事情,但一维数组作品,虽然! 任何帮助?

如果使用ReDim Preserve ,则只能调整数组的最后一个维度。 看到这里: https : //docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/redim-statement
如果你正在寻找一个解决scheme,那么你可以交换数组成为Arr(2,p)正如你所说的列号总是2。

如上所述,您只能保留最后一个维度。

但是您也可以使用其他方法来查找所需的“行数”,并在重新设置数组之前进行设置:

 Dim Arr As Variant p = 1 dim rws as long rws = Application.WorkSheetFunction.CountIf(Sheets("Data").Range("U5:U" & Lrow+4),">0") Redim Arr(1 to rws,1 to 2) For i = 1 To LRow If Sheets("Data").Range("U" & 4 + i).Value > 0 Then Arr(p, 1) = Sheets("Data").Range("U" & 4 + i).Value Arr(p, 2) = Sheets("Data").Range("N" & 4 + i).Value p = p + 1 End If Next