Excel VBA | 多列の配列処理(3次元配列の考え方)

VBA
スポンサーリンク

Excel VBA で Range.Value を読み込むと 2次元配列(行 × 列) が得られます。
「3次元配列」は Excel のセル範囲から直接は得られませんが、複数シートや複数テーブルをまとめて扱うときに「シート × 行 × 列」という形で自分で構築することができます。


3次元配列のイメージ

  • 次元1: シート番号
  • 次元2: 行番号
  • 次元3: 列番号

つまり arr(sheetIndex, rowIndex, colIndex) のようにアクセスします。


実装例①:複数シートのデータをまとめて配列に格納

シナリオ: 3つのシート(Sheet1~Sheet3)の B2:D10 のデータをまとめて処理する。

Sub MultiSheetArray()
    Dim arr As Variant
    Dim ws As Worksheet
    Dim sheetCount As Long, rowCount As Long, colCount As Long
    Dim i As Long, j As Long, k As Long
    
    sheetCount = 3
    rowCount = 9   'B2~B10 → 9行
    colCount = 3   'B~D → 3列
    
    ' 3次元配列を定義
    ReDim arr(1 To sheetCount, 1 To rowCount, 1 To colCount)
    
    ' 各シートからデータを読み込む
    For i = 1 To sheetCount
        Set ws = ThisWorkbook.Sheets(i)
        Dim temp As Variant
        temp = ws.Range("B2:D10").Value
        
        For j = 1 To rowCount
            For k = 1 To colCount
                arr(i, j, k) = temp(j, k)
            Next k
        Next j
    Next i
    
    ' 例: Sheet2 の 3行目・2列目の値を表示
    Debug.Print arr(2, 3, 2)
End Sub
VB

実装例②:複数シートの合計を計算

シナリオ: 各シートの売上データをまとめて配列に入れ、全シート合計を計算する。

Sub SumAcrossSheets()
    Dim arr As Variant
    Dim ws As Worksheet
    Dim sheetCount As Long, rowCount As Long, colCount As Long
    Dim i As Long, j As Long, k As Long
    Dim total As Double
    
    sheetCount = 3
    rowCount = 9
    colCount = 3
    
    ReDim arr(1 To sheetCount, 1 To rowCount, 1 To colCount)
    
    ' データ読み込み
    For i = 1 To sheetCount
        Set ws = ThisWorkbook.Sheets(i)
        Dim temp As Variant
        temp = ws.Range("B2:D10").Value
        
        For j = 1 To rowCount
            For k = 1 To colCount
                arr(i, j, k) = temp(j, k)
            Next k
        Next j
    Next i
    
    ' 合計計算
    total = 0
    For i = 1 To sheetCount
        For j = 1 To rowCount
            For k = 1 To colCount
                If IsNumeric(arr(i, j, k)) Then
                    total = total + arr(i, j, k)
                End If
            Next k
        Next j
    Next i
    
    Debug.Print "全シート合計 = " & total
End Sub
VB

✅ まとめ

  • Excel の Range.Value2次元配列(行 × 列)
  • 3次元配列は「シート × 行 × 列」として自分で構築する
  • 実務では「複数シートのデータをまとめて処理」「シート間で集計」などに便利

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました