第4講 If文の学習
第6話 最小値・最大値の検出
最高点・最低点の算出コード例
Private Sub CommandButton1_Click()
・
・
・
'各生徒の最高点の算出
Dim max As Integer
For i = 1 To 40
max = 0
For j = 1 To 5
If Cells(6 + i, 1 + j) > max Then max = Cells(6 + i, 1 + j)
Next
Cells(6 + i, 9) = max
Next
'各生徒の最低点の算出
Dim min As Integer
For i = 1 To 40
min = 100
For j = 1 To 5
If Cells(6 + i, 1 + j) < min Then min = Cells(6 + i, 1 + j)
Next
Cells(6 + i, 10) = min
Next
'各教科と合計・平均の最高点の算出
For i = 1 To 7
max = 0
For j = 1 To 40
If Cells(6 + j, 1 + i) > max Then max = Cells(6 + j, 1 + i)
Next
Cells(49, 1 + i) = max
Next
'各教科と合計・平均の最低点の算出
For i = 1 To 7
min = 500
For j = 1 To 40
If Cells(6 + j, 1 + i) < min Then min = Cells(6 + j, 1 + i)
Next
Cells(50, 1 + i) = min
Next
End Sub
出力例
解説
'各生徒の最高点の算出
Dim max As Integer
For i = 1 To 40
max = 0
For j = 1 To 5
If Cells(6 + i, 1 + j) > max Then max = Cells(6 + i, 1 + j)
Next
Cells(6 + i, 9) = max
Next
各生徒や各教科の最高点のみなら
Dim max As Integer
は
Dim max As Byte
でもよいわけですが、後に5教科合計の最大値も算出します。
これは当然255を超えていると想定しなければなりませんから、整数型にしてあります。
max = 0
の位置のご注意して下さい。うっかりすると、
Dim max As Integer
max = 0
For i = 1 To 40
For j = 1 To 5
If Cells(6 + i, 1 + j) > max Then max = Cells(6 + i, 1 + j)
Next
Cells(6 + i, 9) = max
Next
とやってしまいますが、これだと各生徒の5教科中の最高点ではなく、
40人×5教科=全データ中の最高点の算出になってしまいます。
iが各生徒の出席番号に対応しているわけですが、
iが変わる度、すなわち対象生徒が変わる度にmaxは0の戻さないと、各生徒の最高点の算出にはならないわけです。
For j = 1 To 5
If Cells(6 + i, 1 + j) > max Then max = Cells(6 + i, 1 + j)
Next
は5教科の中の最高点を算出しています。
If Cells(6 + i, 1 + j) > max Then max = Cells(6 + i, 1 + j)
は
If Cells(6 + i, 1 + j) >= max Then max = Cells(6 + i, 1 + j)
でもよいわけです。
両者の違いは、
前者が赤の36を打ち出しているに対して、後者が紺の36を打ち出している点です。
If Cells(6 + i, 1 + j) > max Then max = Cells(6 + i, 1 + j)
だと、社会のときCells(6 + i, 1 + j) > max は36 > 36 で真でないので、max = Cells(6
+ i, 1 + j)は実行されません。
それに対して
If Cells(6 + i, 1 + j) >= max Then max = Cells(6 + i, 1 + j)
のときは、Cells(6 + i, 1 + j) >= maxは36 ≦ 36 となり、真ですからmax = Cells(6 + i,
1 + j)が実行されます。
ですから
If Cells(6 + i, 1 + j) > max Then max = Cells(6 + i, 1 + j)
If Cells(6 + i, 1 + j) >= max Then max = Cells(6 + i, 1 + j)
のどちらでも結果は同じですが、最高点が同じものがあった場合、最初のものを打つ出すか、最後のものを打ち出すかの違いがあります。
今のプログラミングでは違いがわかりませんが、例えば教科名も出力するプログラミングになっていたとすれば、
前者は国語、後者は社会と出力することになるわけです。
第8講で40人の生徒の合計点による並び替えを扱う予定になっていますが、
両者の違いがそこで問題になってきます。
第5話へ 第5講第1話へ
vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
数学研究室に戻る