Excel VBA | 動的配列

VBA
スポンサーリンク

では、動的配列 + 3次元配列 を組み合わせた初心者向けの実践例を作ります。
この例では「学期 × 生徒 × 教科」の成績を管理し、ユーザー入力に応じて人数や学期数を自由に増やせる形にしています。


実践例:動的配列 + 3次元配列で成績管理

Sub Dynamic3DArrayExample()
    ' ---------------------------
    ' 変数宣言
    ' ---------------------------
    Dim numStudents As Integer
    Dim numTerms As Integer
    Dim numSubjects As Integer
    Dim studentNames() As String
    Dim subjects() As String
    Dim scores() As Integer  ' 3次元配列(学期, 生徒, 教科)
    Dim i As Integer, j As Integer, k As Integer
    Dim total As Integer
    Dim avg As Double
    
    ' ---------------------------
    ' 学生人数・学期数・教科数を入力
    ' ---------------------------
    numStudents = InputBox("学生の人数を入力してください")
    numTerms = InputBox("学期数を入力してください")
    numSubjects = InputBox("教科数を入力してください(例: 数学・国語なら2)")
    
    ' ---------------------------
    ' 配列サイズを動的に決定
    ' ---------------------------
    ReDim studentNames(numStudents - 1)
    ReDim subjects(numSubjects - 1)
    ReDim scores(numTerms - 1, numStudents - 1, numSubjects - 1)
    
    ' ---------------------------
    ' 教科名を入力(例: 数学、国語)
    ' ---------------------------
    For k = 0 To numSubjects - 1
        subjects(k) = InputBox("教科名を入力してください(例: 数学) 教科 " & (k + 1))
    Next k
    
    ' ---------------------------
    ' 学生名を入力
    ' ---------------------------
    For j = 0 To numStudents - 1
        studentNames(j) = InputBox("学生名を入力してください 学生 " & (j + 1))
    Next j
    
    ' ---------------------------
    ' 成績を入力
    ' ---------------------------
    For i = 0 To numTerms - 1        ' 学期
        For j = 0 To numStudents - 1 ' 生徒
            For k = 0 To numSubjects - 1 ' 教科
                scores(i, j, k) = InputBox("学期 " & (i + 1) & " " & studentNames(j) & " の " & subjects(k) & " の点数を入力")
            Next k
        Next j
    Next i
    
    ' ---------------------------
    ' 各学期・各生徒の合計点と平均を計算して表示
    ' ---------------------------
    For i = 0 To numTerms - 1
        For j = 0 To numStudents - 1
            total = 0
            For k = 0 To numSubjects - 1
                total = total + scores(i, j, k)
            Next k
            avg = total / numSubjects
            MsgBox "学期" & (i + 1) & " " & studentNames(j) & " の合計点は " & total & "点、平均点は " & Format(avg, "0.0") & "点です"
        Next j
    Next i
    
End Sub
VB

このコードのポイント

  1. 動的配列
    • 学生人数・学期数・教科数がユーザー入力で決まるため、最初にサイズを固定せず ReDim で動的に作成。
    • studentNames(), subjects() は人数・教科数に応じて動的にサイズ決定。
  2. 3次元配列
    • scores(学期, 生徒, 教科) の順で点数を管理。
    • 外側 → 学期、中 → 生徒、内側 → 教科。
  3. ループ処理
    • 3重ループで全データを入力・処理可能。
    • 合計点や平均点も簡単に計算できる。
  4. 応用可能
    • 学期・生徒・教科が増えても、このコードのまま対応可能。
    • Excelに出力したりCSVに書き出したりも可能。

💡 アレンジ案

  • Excelシートに出力して表形式で確認する
  • 平均点の高い順にソートしてランキング表示
  • 学期ごとのグラフ化
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました