在 VBA 中附加一个动态数组
Appending a dynamic array in VBA
我正在遍历命名范围并根据单元格是否为空附加一个数组。我对VBA中的数组不太熟悉,所以我的逻辑可能不正确。该代码不断覆盖数组中的第一个元素,并且它永远不会递增。我不确定为什么 UBound(myArray) 即使在将元素分配给第一个索引后也始终保持为 0。
我的代码类似于:
Dim myArray() As Double
ReDim Preserve myArray(0)
For Each cell In [myRange]
If cell <> "" Then
If UBound(myArray) > 0 Then
ReDim Preserve myArray(0 To UBound(myArray) + 1)
End If
myArray(UBound(myArray)) = cell.value
End If
Next
将 If UBound(myArray) > 0 Then
更改为 If UBound(myArray) >= 0 Then
即可解决问题。
Sub Test()
Dim myArray() As Double
ReDim Preserve myArray(0)
For Each cell In Range("Hello")
If cell <> "" Then
If UBound(myArray) >= 0 Then
myArray(UBound(myArray)) = cell.Value
ReDim Preserve myArray(0 To UBound(myArray) + 1)
End If
End If
Next
End Sub
使用变量并递增它,代码完成时变量是否大于 ubound 没有区别:
Sub Test()
Dim myArray() As Double, X As Long
X = 0
ReDim Preserve myArray(X)
For Each cell In Range("Hello")
If cell <> "" Then
ReDim Preserve myArray(0 To X)
myArray(X) = cell.Value
X = X + 1
End If
Next
End Sub
扩展 Dan Donoghue 的解决方案以避免过多的 redim(以及在 Jeanno 的解决方案中通过使用变量进行过多的重新计算),我会使用
Dim rng as Range
Set rng = Range("Hello")
Dim myArray() As Double, X As Long, N As Long
X = 0
N = WorksheetFunction.CountIf(rng, "<>")
ReDim Preserve myArray(X)
For Each cell In rng
If cell <> "" And X < N Then
myArray(X) = cell.Value
X = X + 1
If X < N Then ReDim Preserve myArray(0 to X)
End If
Next
我正在遍历命名范围并根据单元格是否为空附加一个数组。我对VBA中的数组不太熟悉,所以我的逻辑可能不正确。该代码不断覆盖数组中的第一个元素,并且它永远不会递增。我不确定为什么 UBound(myArray) 即使在将元素分配给第一个索引后也始终保持为 0。
我的代码类似于:
Dim myArray() As Double
ReDim Preserve myArray(0)
For Each cell In [myRange]
If cell <> "" Then
If UBound(myArray) > 0 Then
ReDim Preserve myArray(0 To UBound(myArray) + 1)
End If
myArray(UBound(myArray)) = cell.value
End If
Next
将 If UBound(myArray) > 0 Then
更改为 If UBound(myArray) >= 0 Then
即可解决问题。
Sub Test()
Dim myArray() As Double
ReDim Preserve myArray(0)
For Each cell In Range("Hello")
If cell <> "" Then
If UBound(myArray) >= 0 Then
myArray(UBound(myArray)) = cell.Value
ReDim Preserve myArray(0 To UBound(myArray) + 1)
End If
End If
Next
End Sub
使用变量并递增它,代码完成时变量是否大于 ubound 没有区别:
Sub Test()
Dim myArray() As Double, X As Long
X = 0
ReDim Preserve myArray(X)
For Each cell In Range("Hello")
If cell <> "" Then
ReDim Preserve myArray(0 To X)
myArray(X) = cell.Value
X = X + 1
End If
Next
End Sub
扩展 Dan Donoghue 的解决方案以避免过多的 redim(以及在 Jeanno 的解决方案中通过使用变量进行过多的重新计算),我会使用
Dim rng as Range
Set rng = Range("Hello")
Dim myArray() As Double, X As Long, N As Long
X = 0
N = WorksheetFunction.CountIf(rng, "<>")
ReDim Preserve myArray(X)
For Each cell In rng
If cell <> "" And X < N Then
myArray(X) = cell.Value
X = X + 1
If X < N Then ReDim Preserve myArray(0 to X)
End If
Next