はじめに
VBAの「配列」は、通常、データを一列に並べた「1次元」のものを指します。しかし、Excelのワークシートのように、行と列からなる表(テーブル)形式のデータを扱いたい場合、より強力な「2次元配列」が非常に役立ちます。
2次元配列は、縦横に仕切りがある大きな箱のようなもので、(行番号, 列番号)
の形で各データにアクセスします。この2次元配列を使いこなすことで、特に大量のセルデータを扱う際の処理速度を劇的に向上させることができます。
この記事では、2次元配列の宣言方法から、ループを使った値の代入、そして配列のデータを一瞬でセル範囲に書き出す高速化テクニックまでを、分かりやすく解説します。
2次元配列の基本的なサンプルコード
このマクロは、3行4列の2次元配列を作成し、各要素に (行, 列)
という形式の文字列を格納します。その後、配列の全データを B2:E4
のセル範囲に一括で書き出します。
完成コード
' 2次元配列の基本的な使い方
Sub TwoDimensionalArrayExample()
'--- 1. 2次元配列の宣言 ---
' 1から3までの行、1から4までの列を持つ、文字列(String)型の配列を宣言
Dim dataTable(1 To 3, 1 To 4) As String
Dim r As Long, c As Long ' 行(row)と列(column)のループカウンター
'--- 2. ネストしたループで配列の各要素に値を代入 ---
For r = 1 To 3 ' 行のループ (外側)
For c = 1 To 4 ' 列のループ (内側)
' (行, 列) のインデックスを使って値を格納
dataTable(r, c) = "R" & r & ", C" & c
Next c
Next r
'--- 3. 配列のデータをセル範囲に一括で書き出す ---
Worksheets("Sheet1").Range("B2:E4").Value = dataTable
MsgBox "2次元配列の内容をセルに一括で書き出しました。"
End Sub
コードの解説
1. 2次元配列の宣言
Dim dataTable(1 To 3, 1 To 4) As String
これが2次元配列を宣言する部分です。
(1 To 3, 1 To 4)
: カンマで区切って、**第1次元(行)と第2次元(列)**のインデックス範囲をそれぞれ指定します。この例では、「1から3までの行」と「1から4までの列」を持つ、3行4列の表形式の配列が作成されます。
2. ネストしたループでの値の代入
For r = 1 To 3 ... For c = 1 To 4 ... Next c ... Next r
2次元配列の全要素を処理するには、このように For
ループを入れ子(ネスト)にするのが定石です。外側のループで行を、内側のループで列を順番に処理していきます。
dataTable(r, c) = "R" & r & ", C" & c
値の代入や参照は、配列名(行インデックス, 列インデックス)
の形式で行います。
3. セル範囲への一括書き出し
Worksheets("Sheet1").Range("B2:E4").Value = dataTable
この一行が、2次元配列を使う最大のメリットの一つです。
- 配列の次元数とサイズ(3行4列)と、書き出し先のセル範囲のサイズ(
B2:E4
は3行4列)が一致している場合、配列変数をセル範囲の.Value
プロパティに直接代入するだけで、全てのデータが一瞬で転記されます。
For
ループでセルを一つずつ書き込む方法に比べて、処理速度が圧倒的に速いため、大量のデータを扱う際には必須のテクニックです。
まとめ
今回は、VBAにおける2次元配列の基本的な使い方を解説しました。
Dim 配列名(行範囲, 列範囲)
で、表形式のデータを格納する配列を宣言する。- ネストした
For
ループで、全要素を効率的に処理する。 Range.Value = 配列
の構文で、配列のデータをシートに高速で一括転記できる。
2次元配列をマスターすることで、ExcelVBAでのデータ処理能力が飛躍的に向上します。ぜひ、この強力なツールを使いこなしてください。