【´・ω・`】:さて、べべちゃんの作った各科目の得点合計・受験者数・平均点の
コードをもう一度じっくりと見て欲しい。たしか、成績一覧表を作る(6)だったな。
べべちゃん、あのコードはどうやって作ったんだい?
(●`ε´●):ああ、科目名と列が異なるだけだから国語のために作った下のコードを
コピペしてつくったんだ。変数の名前を変えて、列を表す数字を変えてな。
俺って頭いいだろ!!
※べべちゃんは国語のコードの赤字の部分を変えて数学のコードを
作りました。
**********************************************************************
%国語=0
%国語受験者=0
For %i = 8 To 52
%国語 = %国語 + Cells(%i, 4)
Next
For %i = 8 To 52
If Not IsBlank(Cells(%i, 4)) Then
%国語受験者 = %国語受験者 + 1
End If
Next
If %国語受験者>0 Then
%国語平均= %国語/%国語受験者
End If
Cells(53,4)=%国語
Cells(54,4)=%国語受験者
Cells(55,4)=%国語平均
**********************************************************************
%現社=0
%現社受験者=0
For %i = 8 To 52
%現社 = %現社 + Cells(%i, 6)
Next
For %i = 8 To 52
If Not IsBlank(Cells(%i, 6)) Then
%現社受験者 = %現社受験者 + 1
End If
Next
If %現社受験者>0 Then
%現社平均= %現社/%現社受験者
End If
Cells(53,6)=%現社
Cells(54,6)=%現社受験者
Cells(55,6)=%現社平均
【´・ω・`】:同じような処理を繰り返すときはその処理を
1カ所(さぶルーチン)にまとめ、そのルーチンを
呼び出して使うのが定石だ。例えば上の処理なら
・・・・
Sub 教科別成績(%列)
%科目=0
%科目受験者=0
For %i = 8 To 52
%科目 = %科目 + Cells(%i, %列)
If Not IsBlank(Cells(%i, %列)) Then
%科目受験者 = %科目受験者 + 1
End If
Next
If %科目受験者>0 Then
%科目平均= %科目/%科目受験者
End If
Cells(53,%列)=%科目
Cells(54,%列)=%科目受験者
Cells(55,%列)=%科目平均
End Sub
・・・・こうしておけば変数%列を変えれば同じコードで全ての
科目に対応させることが出来る。
似たようなコードをたくさんいろんなところに書き散らかしておくと
コードの保守が難しくなる。どこかを変えようと思ったら何十カ所も
書き換えなくてはならない。バグを生み出す元凶だな。
このサブルーチンをメインルーチンの下に書いておけば
このようなコードでべべちゃんがやったのと同じことができる。
**********************************************************************
Call 教科別成績(4) !!国語
Call 教科別成績(6) !!現社
Call 教科別成績(8) !!数学
Call 教科別成績(10) !!化学
Call 教科別成績(12) !!体育
Call 教科別成績(14) !!保健
Call 教科別成績(16) !!音楽
Call 教科別成績(18) !!美術
Call 教科別成績(20) !!書道
Call 教科別成績(22) !!英語
Call 教科別成績(24) !!オーラル
Call 教科別成績(26) !!家庭
Sub 教科別成績(%列)
%科目=0
%科目受験者=0
For %i = 8 To 52
%科目 = %科目 + Cells(%i, %列)
If Not IsBlank(Cells(%i, %列)) Then
%科目受験者 = %科目受験者 + 1
End If
Next
If %科目受験者>0 Then
%科目平均= %科目/%科目受験者
End If
Cells(53,%列)=%科目
Cells(54,%列)=%科目受験者
Cells(55,%列)=%科目平均
End Sub
(●`ε´●):ずいぶん、コードが短くなってすっきりしたな。
【´・ω・`】:ふふふ、まだまだ。次回は今紹介したコードを更にまとめてみよう。
(●`ε´●):え、まだまとめられるのか?
【´・ω・`】:うん。では次回に・・・
コメント