如何填充动态二维数组?
How do I fill a dynamic 2D Array?
为什么会这样:
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 行导致 "run time error 9 - Subscript out of range"?
在进入 for 循环之前,我不知道数组行数。列号应始终为 2。不过,使用一维数组做同样的事情是可行的!
有帮助吗?
如果您使用 ReDim Preserve
,您只能调整数组最后一个维度的大小。
看这里:https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/redim-statement
如果您正在寻找解决方案,那么您可以将数组交换为 Arr(2,p)
正如您所说的列号将始终为 2.
如上所述,您只能 redim 保留最后一个维度。
但您也可以使用其他方法找到所需的 "rows" 数量,并在重定数组之前设置该数量:
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
为什么会这样:
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 行导致 "run time error 9 - Subscript out of range"? 在进入 for 循环之前,我不知道数组行数。列号应始终为 2。不过,使用一维数组做同样的事情是可行的! 有帮助吗?
如果您使用 ReDim Preserve
,您只能调整数组最后一个维度的大小。
看这里:https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/redim-statement
如果您正在寻找解决方案,那么您可以将数组交换为 Arr(2,p)
正如您所说的列号将始终为 2.
如上所述,您只能 redim 保留最后一个维度。
但您也可以使用其他方法找到所需的 "rows" 数量,并在重定数组之前设置该数量:
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