業務改善 web開発 programming 旅行系記事多め。

【ExcelVBA】ループ中に配列の要素数を動的に増やして値を格納する

ExcelVBAExcelVBA

 

ぱらげです。

ループ中に「○○の場合のみ、○○(値)を配列に格納する」のような条件式を設定したくなることがよくあります。
配列となる変数はあらかじめ要素数を指定する必要があるのですが、この場合だと必要な分だけ要素数を拡張して、そこに値を格納していくという作業が必要になります。

配列に入れる値

割とよく使うため、自分自身の備忘録がてら動的配列のサンプルコードを記載しておきたいと思います。

Sub makeArray2()

Dim arr As Variant
Dim endDataRow As Long
Dim i As Long

' 配列要素数0をあらかじめ設定しておく
arr = Array(0)

'A列の値最終行を取得する
endDataRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To endDataRow
  ' A列の値が「A」から始まる場合
  If Sheets("Sheet1").Range("A" & i) Like "A*" Then
      ' 配列の要素数を拡張する
      ReDim Preserve arr(UBound(arr) + 1)
      ' 配列にA列の値を格納する
      arr(UBound(arr)) = Sheets("Sheet1").Range("A" & i)

  End If

Next i

End Sub

配列の要素数を拡張し、そこに値を格納しているコードはこの部分です。

' 配列の要素数を拡張する
ReDim Preserve arr(UBound(arr) + 1)
' 配列にA列の値を格納する
arr(UBound(arr)) = Sheets("Sheet1").Range("A" & i)

実際に配列「arr」に格納された値を見てみましょう。

意図した値が入っていることが確認できます。

ちなみに、セル範囲が把握できている場合はこのようなループを使わずに少ないコードで配列に値を入れることもできます。そちらについての解説は以下の記事をご覧ください。

コメント

タイトルとURLをコピーしました