では、動的配列 + 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このコードのポイント
- 動的配列
- 学生人数・学期数・教科数がユーザー入力で決まるため、最初にサイズを固定せず
ReDimで動的に作成。 studentNames(),subjects()は人数・教科数に応じて動的にサイズ決定。
- 学生人数・学期数・教科数がユーザー入力で決まるため、最初にサイズを固定せず
- 3次元配列
scores(学期, 生徒, 教科)の順で点数を管理。- 外側 → 学期、中 → 生徒、内側 → 教科。
- ループ処理
- 3重ループで全データを入力・処理可能。
- 合計点や平均点も簡単に計算できる。
- 応用可能
- 学期・生徒・教科が増えても、このコードのまま対応可能。
- Excelに出力したりCSVに書き出したりも可能。
💡 アレンジ案
- Excelシートに出力して表形式で確認する
- 平均点の高い順にソートしてランキング表示
- 学期ごとのグラフ化
