名前付き範囲をループして、セルが空かどうかに基づいて配列を追加しています。私は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
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