第3講 For文(繰り返し処理)
第7話 成績一覧表に生徒の合計と平均を加える
実行ボタンを押すと、
と各教科の合計と平均に加えて各生徒の合計と平均が表示され、
消去ボタンを押すと、
に戻るマクロのコード例
Private Sub CommandButton1_Click()
Dim w As Integer, i As Integer
w = 0 'wを0に初期化
For i = 0 To 4 '国語の合計を算出
w = w + Cells(5 + i, 3)
Next
Cells(10, 3) = w '国語合計の表示
Cells(11, 3) = w / 5 '国語平均の表示
w = 0 'wを0に初期化
For i = 0 To 4 '数学の合計を算出
w = w + Cells(5 + i, 4)
Next
Cells(10, 4) = w '数学合計の表示
Cells(11, 4) = w / 5 '数学平均の表示
w = 0 'wを0に初期化
For i = 0 To 4 '英語の合計を算出
w = w + Cells(5 + i, 5)
Next
Cells(10, 5) = w '英語合計の表示
Cells(11, 5) = w / 5 '英語平均の表示
w = 0 'wを0に初期化
For i = 0 To 2 '出席番号1の合計を算出
w = w + Cells(5, 3 + i)
Next
Cells(5, 6) = w '出席番号1の合計の表示
Cells(5, 7) = w / 3 '出席番号1の平均の表示
w = 0 'wを0に初期化
For i = 0 To 2 '出席番号2の合計を算出
w = w + Cells(6, 3 + i)
Next
Cells(6, 6) = w '出席番号2の合計の表示
Cells(6, 7) = w / 3 '出席番号の2平均の表示
w = 0 'wを0に初期化
For i = 0 To 2 '出席番号3の合計を算出
w = w + Cells(7, 3 + i)
Next
Cells(7, 6) = w '出席番号3の合計の表示
Cells(7, 7) = w / 3 '出席番号3の平均の表示
w = 0 'wを0に初期化
For i = 0 To 2 '出席番号4の合計を算出
w = w + Cells(8, 3 + i)
Next
Cells(8, 6) = w '出席番号4の合計の表示
Cells(8, 7) = w / 3 '出席番号4の平均の表示
w = 0 'wを0に初期化
For i = 0 To 2 '出席番号5の合計を算出
w = w + Cells(9, 3 + i)
Next
Cells(9, 6) = w '出席番号5の合計の表示
Cells(9, 7) = w / 3 '出席番号5の平均の表示
End Sub
Private Sub CommandButton2_Click()
Range("C10:G11").Select
Selection.ClearContents 'C10からG11までのセルの消去
Range("F5:G9").Select
Selection.ClearContents 'F5からG9までのセルの消去
Range("A1").Select
End Sub
参考ダウンロード添付ファイル
皆さん、大変頭が混乱したのではないでしょうか。
無理もありません。
国語の合計の算出だけなら、
1次元の動きですが、
国語・数学・英語の合計算出と各生徒の合計算出だと、
縦と横の両方向を考えなければならず、
2次元の動きになるからです。
本来2次元であるものを1次元のFor文で処理したことに、
困難性の原因があります。
2次元For文とは、
For i=0 To 5
For j=0 To 3
・・・
・・・
・・・
Next
Next
というように入れ子式にFor文が入っているものをいいます。
もし入れ子式に2つFor文が入っていれば、
3次元For文となります。
2次元For文なら、今回の長ったらしいコードは1/4程度の分量で済むことになります。
では、2次元For文で組みましょうといいたいところですが、
実は、2次元For文は初心者にとっては本当に大きな障壁と言えます。
ですので、いきなり今回と成績一覧表のコードを2次元For文で組めといえば、
挫折してしまう方も出てきてしまいますので、
より簡単なプログラムを組んでいただきます。
次のファイルを開いて、
添付ファイル
Private Sub CommandButton1_Click()
Dim i As Integer, j As Integer
For i = 0 To 4
For j = 0 To 3
Next
Next
End Sub
Private Sub CommandButton2_Click()
Rows("4:2000").Select '4行目から2000行までの選択
Selection.ClearContents '選択したセルの消去
Range("A1").Select
End Sub
空欄のところを埋めて、
(このように数字が縦横に並んでいるものを行列といいます。)
を実現して下さい。
付け足すコードは1行のみです。
表示させる数字は?1*i + j + ?2とします。
?1と?2にはそれぞれ整数が入ります。
表示させるセル位置はiとjをうまく使って指定します。
Cellsの()にiとjを入れます。
たったの1行ですが、初心者にはかなり敷居が高い課題ですので、
10分ぐらい考えてもわからない場合には、
次話をクリックすることをお勧めします。
第6話へ 第8話へ