第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
出力例
r01
r002

解説
  '各生徒の最高点の算出
  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)
でもよいわけです。
両者の違いは、
r003
r004
前者が赤の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話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る