Excel VBA | 多次元配列

VBA
スポンサーリンク

では、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

このコードのポイント

  1. 3次元配列
    • (学期, 生徒, 教科) の順でデータを管理
    • 外側 → 学期、真ん中 → 生徒、内側 → 教科
  2. 動的配列(ReDim)
    • 最初はサイズを決めず Dim scores()
    • 後から ReDim でサイズ決定
    • Preserve を使えば既存データを消さずにサイズ変更可能
  3. ループ処理
    • 外側から内側に向けて順に回す
    • 合計点やデータ表示が簡単にできる
  4. 応用例
    • 学期や生徒を増やすときに ReDim で対応可能
    • 実務的には「成績表」「売上表」など、3次元以上の表も管理できる
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました