配列の操作
VBA の配列は、複数の値を 1 つの変数名でまとめて扱うための仕組みです。
同じ種類の値をまとめる型付き配列と、Array 関数で作成する Variant 配列のどちらもよく使われます。
配列を使うと、売上一覧、ファイル名一覧、セル範囲から取得した値などを効率よく処理できます。
このページでは VBA における配列の定義と操作方法について解説します。
配列の定義
Array 関数を使うと、簡単に Variant 配列を作成できます。
Dim fruits As Variant
fruits = Array("apple", "banana", "orange")
上記の例では、fruitsという変数にArray関数を使って"apple", "banana", "orange"という 3 つの要素を持つ配列を代入しています。
Array 関数で作成した配列のインデックスは 0 から始まります。Option Base 1 を指定していても、Array 関数の戻り値は 0 始まりです。
fruits(0) ' => "apple"
配列には文字列だけでなく、数値や真偽値も格納することができます。
Dim numbers As Variant
numbers = Array(1, 2, 3)
numbers(1) ' => 2
同じ型の値だけを扱う場合は、型付き配列として宣言する方法もあります。
Dim scores(1 To 3) As Long
scores(1) = 80
scores(2) = 95
scores(3) = 72
2 次元配列
配列の要素として、さらに配列を格納することで、2 次元配列を定義することができます。
Dim matrix As Variant
matrix = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9))
上記の例では、matrixという変数に 3 つの要素を持つ配列を代入しています。それぞれの要素は 3 つの要素を持つ配列です。
matrix(0)(0) ' => 1
matrix(1)(1) ' => 5
配列の操作
配列には、要素の追加、削除などが可能ですが、少し複雑な操作が必要です。
要素の追加
配列に要素を追加するには、ReDimステートメントを使って配列のサイズを変更し、新しい要素を追加します。
ReDim Preserve fruits(3)
fruits(3) = "grape"
ReDimを使用せずに要素を追加することはできません。また、Preserveを付けずにReDimでサイズを変更すると、元の配列のデータは初期化されます。既存データを保持したい場合はReDim Preserveを使います。
なお、2 次元以上の配列でPreserveを使う場合、変更できるのは最後の次元の上限だけです。行数方向を増やしたい場合は、配列の設計を見直すか、別の配列へコピーする必要があります。
要素の削除
配列から要素を削除するには、ReDimステートメントを使って配列のサイズを変更し、削除したい要素を削除します。
ReDim Preserve fruits(2)
特定の位置の要素を削除する必要がある場合は、要素を取り除いた配列を再定義する必要があります。
For Eachステートメントを使った配列の操作
配列の各要素に対して処理を行う場合は、For Eachステートメントを使うと便利です。
Dim fruit As Variant
For Each fruit In fruits
Debug.Print fruit
Next fruit
上記の例では、fruits配列の各要素をfruitという変数に代入して、Debug.Printステートメントで出力しています。
実行すると、以下のように出力されます。
apple
banana
orange
反復の流れをステップごとに追う
以下のビジュアライザでは、配列を For Each で走査する際に各要素がどのように取り出されるかを可視化します。要素を編集したり、インデックスでアクセスする For...Next タブと見比べたりして動作を理解してください。
For Each ... Next(要素列挙ループ): コレクションや配列のすべての要素を順に処理します。インデックスを意識せず書けるのが利点です。
1Sub LoopDemo()2Dim arr As Variant3arr = Array("りんご", "バナナ", "みかん", "ぶどう")45Dim item As Variant6For Each item In arr7Debug.Print item8Next item9End Sub
- item"りんご"
- index1