web-dev-qa-db-ja.com

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
4
KingKong

Dan Donoghueのソリューションを拡張して、過度の再調整(および、変数を使用した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
0
B M