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.Valueは 2次元配列(行 × 列) - 3次元配列は「シート × 行 × 列」として自分で構築する
- 実務では「複数シートのデータをまとめて処理」「シート間で集計」などに便利


