【´・ω・`】:今回は前回紹介した下のコードをさらにまとめてみよう。
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 Cells(%i, %列) <> "" Then
%科目受験者 = %科目受験者 + 1
End If
Next
If %科目受験者>0 Then
%科目平均= %科目/%科目受験者
End If
Cells(53,%列)=%科目
Cells(54,%列)=%科目受験者
Cells(55,%列)=%科目平均
End Sub
【´・ω・`】:数字に赤い色をつけた。そこに着目して欲しい。
何か気がつかないか?
(●`ε´●):初項4,公差2の等差数列になっているな。
【´・ω・`】:だから上のコードの上半分(メインルーチン)は下のように
まとめられる・・・。
For %i = 4 TO 26 Step 2
Call 教科別成績(%i)
Next
(●`ε´●):3行マクロか・・・。ところでStepってのは何だ?
【´・ω・`】:変数%iの増加分だ。Stepを省略するとForループでは
ループ1回につき%iが1増加する。Step 2 とすると
2ずつ増加するんだ。
(●`ε´●):そうか。こう書けば4のつぎに%iは5を飛ばして
6になるんだな?
【´・ω・`】:そう。
(●`ε´●):かなり、短くなったな。
【´・ω・`】:うん。でもここまでやったら、もう一押ししたくなる・・・。
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
(●`ε´●):まだやるのか?
最近のコメント