この記事を読んでできること
・行の最後まで、または、列の最後までを動的配列の要素にいれていく。
・行数、または、列数は、事前に指定をしない。
A列に東京23区が記載されています。
区の総数は23区だとわかっていますが、今回は個数がわからないものとします。
動的配列(配列数は指定しない)を準備して、セルA2からA列が空欄になるところまで、配列の要素に格納していきます。
サンプルコード
Sub Sample()
'' 動的配列を準備する
Dim Tokyo() As String
Range("A2").Select
'' A列が空欄になるまで動的配列に要素をいれる
Dim i As Integer
i = 0
Do While ActiveCell.Value <> ""
ReDim Preserve Tokyo(i+1)
Tokyo(i) = ActiveCell.Value
i = i + 1
'' アクティブセルを下方向に1つずらす
ActiveCell.Offset(1,0).Select
Loop
End Sub
解説
一般的に配列はを定義する際は、要素数を指定して宣言します。
Dim 配列名(要素数) As 型
動的配列の場合は、要素数を指定せずに宣言し、要素数を再定義して使います。
サンプルコードの場合、4行目で動的配列を定義し、12行目のReDimで再定義しています。
Dim 配列名() As 型
ReDim 配列名(要素数)
今回ポイントとして、要素数を再定義する際にキーワード[Preserve]を用いています。
Preserveをつけることで、これまでに格納した配列の要素を保持したまま再定義できます。
もしサンプルコードでPreserveをつけない場合は、空の配列が上書きされていき、
最後の要素「目黒区」だけが格納された配列が完成します。
ReDim 配列(要素数) '' 空の配列を再定義
ReDim Preserve 配列(要素数) '' これまでに格納された要素を保持して再定義
配列の要素は0から始まることに注意してください。
もし「配列(2)」と定義したら、配列の要素は「配列(0)、配列(1)、配列(2)」の3つです。
サンプルコードの13行目では、Tokyo(0)から格納しています。
まとめ
要素数が変わる場合には、動的配列を活用すると便利です。
また、Whileを用いて要素数を定義しないことで、要素数の増減による格納漏れや、
エラーの発生を防ぐことができると思います。
コメント