在VBA中追加动态数组

Kin*_*ong 4 vba dynamic-arrays

我循环遍历命名范围并根据单元格是否为空来附加数组.我不太熟悉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
Run Code Online (Sandbox Code Playgroud)

Dan*_*hue 9

使用变量并递增它,如果变量大于代码完成时的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
Run Code Online (Sandbox Code Playgroud)


Jea*_*nno 5

改变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
Run Code Online (Sandbox Code Playgroud)