では、3次元配列+ReDimを使った初心者向けサンプルコードを作りました。Excel VBAで動かせる形です。コメントも丁寧に入れているので、初心者でも理解しやすいです。
サンプルコード:2学期 × 2人の生徒 × 2教科(数学・国語)の成績管理
Sub Sample3DArrayReDim()
' ---------------------------
' 変数宣言
' ---------------------------
Dim scores() As Integer ' 3次元配列(学期, 生徒, 教科)
Dim students(1) As String ' 生徒の名前
Dim i As Integer, j As Integer, k As Integer
Dim total As Integer
' ---------------------------
' 生徒の名前を設定
' ---------------------------
students(0) = "佐藤一郎"
students(1) = "山田花子"
' ---------------------------
' 配列のサイズを決定(2学期 × 2人 × 2教科)
' ---------------------------
ReDim scores(1, 1, 1) ' (学期:0-1, 生徒:0-1, 教科:0-1)
' ---------------------------
' 成績を入力(例:ランダムでも可)
' ---------------------------
' 学期0
scores(0, 0, 0) = 80 ' 佐藤一郎 数学
scores(0, 0, 1) = 90 ' 佐藤一郎 国語
scores(0, 1, 0) = 75 ' 山田花子 数学
scores(0, 1, 1) = 85 ' 山田花子 国語
' 学期1
scores(1, 0, 0) = 85 ' 佐藤一郎 数学
scores(1, 0, 1) = 95 ' 佐藤一郎 国語
scores(1, 1, 0) = 78 ' 山田花子 数学
scores(1, 1, 1) = 88 ' 山田花子 国語
' ---------------------------
' 各生徒・各学期の合計点を表示
' ---------------------------
For i = 0 To 1 ' 学期
For j = 0 To 1 ' 生徒
total = 0
For k = 0 To 1 ' 教科
total = total + scores(i, j, k)
Next k
MsgBox "学期" & (i + 1) & " " & students(j) & "の合計点は " & total & "点です"
Next j
Next i
' ---------------------------
' 配列サイズを追加で変更(学期を増やす例)
' ---------------------------
' 学期を3学期に増やす
ReDim Preserve scores(2, 1, 1) ' Preserve で最後の次元以外は変更不可 → 学期増やしOK
' 3学期目のデータも入れられる
scores(2, 0, 0) = 90
scores(2, 0, 1) = 95
scores(2, 1, 0) = 82
scores(2, 1, 1) = 87
' 新しい学期の合計点も表示
For j = 0 To 1
total = scores(2, j, 0) + scores(2, j, 1)
MsgBox "学期3 " & students(j) & "の合計点は " & total & "点です"
Next j
End Sub
VBこのコードのポイント
- 3次元配列
(学期, 生徒, 教科)の順でデータを管理- 外側 → 学期、真ん中 → 生徒、内側 → 教科
- 動的配列(ReDim)
- 最初はサイズを決めず
Dim scores() - 後から
ReDimでサイズ決定 Preserveを使えば既存データを消さずにサイズ変更可能
- 最初はサイズを決めず
- ループ処理
- 外側から内側に向けて順に回す
- 合計点やデータ表示が簡単にできる
- 応用例
- 学期や生徒を増やすときに ReDim で対応可能
- 実務的には「成績表」「売上表」など、3次元以上の表も管理できる
