【VBA】2次元配列の使い方入門!Excelの表形式データを高速処理

目次

はじめに

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でのデータ処理能力が飛躍的に向上します。ぜひ、この強力なツールを使いこなしてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次