(●`ε´●):前回から、だいぶ間があいてしまったな。みんなは
何をやっていたか、たぶん忘れているぞ!!
【´・ω・`】:前回は下のコードをさらにまとめるというところだった。
For %i = 4 TO 26 Step 2
Call 教科別成績(%i)
Next
Sub 教科別成績(%列)
%科目=0
%科目受験者=0
For %i = 8 To 52
%科目 = %科目 + Cells(%i, %列)
If Cells(%i, %列) <> "" Then
%科目受験者 = %科目受験者 + 1
End If
Next
If %科目受験者>0 Then
%科目平均= %科目/%科目受験者
End If
Cells(53,%列)=%科目
Cells(54,%列)=%科目受験者
Cells(55,%列)=%科目平均
End Sub
(●`ε´●):よくみるとForループのなかでやっていることは
サブルーチン教科別成績を呼び出しているだけだな。
【´・ω・`】:うん。だから、結局下のように書いてサブルーチンの部分を
無くしても構わない。
For %列 = 4 TO 26 Step 2
%科目=0
%科目受験者=0
%科目平均=0
For %行 = 8 To 52
%科目 = %科目 + Cells(%行, %列)
If Not IsBlank(Cells(%行, %列)) Then
%科目受験者 = %科目受験者 + 1
End If
Next
If %科目受験者>0 Then
%科目平均= %科目/%科目受験者
End If
Cells(53,%列)=%科目
Cells(54,%列)=%科目受験者
Cells(55,%列)=%科目平均
Next
(●`ε´●):赤い部分はなんだ?
【´・ω・`】:科目ごとに変数%科目、%科目受験者 、%科目平均を
0に初期化するためのコードだ。
(●`ε´●):なんでそんなものをつけるんだ?
【´・ω・`】:サブルーチン教科別成績を呼び出す形式のコードでは
実はあってもなくてもよかった。
(●`ε´●):???
【´・ω・`】:それはサブルーチンを呼びだす度に%科目、%科目受験者 、%科目平均は
自動的に初期化されるからだ。しかし、そうでないときは自動的に
初期化されないから不具合が起こる。
(●`ε´●):どんな?
【´・ω・`】:例えば、ある科目の受験者がゼロの場合、その前の科目の
データがそのまま、表示されてしまう・・・。実際に試して
見て欲しい・・・。
コメント