第13講 3次元ループと3次元配列による成績一覧表の高度化

第4話 戻るボタンの作成

どうですか。うまくいきましたか。

ただし、年間処理はまだ正しい結果は出ません。
年間処理のコードを作ることが第13講の主題でした。

ところで、ボタンが一番上にあり、2学期以降についてはうまく動作しているかどうか確認するのにスクロールしなければなりません。
そこで、
Private Sub CommandButton4_Click()

  f21 '生徒の合計点・平均点の計算
  f22 '各教科等の合計点・平均点の計算
  f23 '各生徒の合否判定
  f24 '各生徒の講評
  f25 '各生徒の最高点の算出
  f26 '各生徒の最低点の算
  f27 '各教科と合計・平均の最高点の算出
  f28 '各教科と合計・平均の最低点の算出
  Cells(71, 1).Select

End Sub

Cells(71, 1).Selectのように工夫して下さい。数字は、画面の大きさや設定によりますので、皆さんで工夫して下さい。
これは、2学期処理を押すと、2学期の一覧表が出てくるようにしたものです。例えば、
q2学期データ作成ボタンをクリックすると、
a
のように自動的にスクロールされます。

さらに、もう一つ工夫しましょう。例えば、年間成績処理を押すと
h
工夫によって年間成績一覧表へは自動的に移動できるようになりましたが、
ボタンに戻るにはやはりいちいちスクロースしなければなりません。
そこで、戻るボタンを3つ作り、一番上に一瞬で戻れるようにしましょう。
o
コード内容は、
Private Sub CommandButton12_Click()
  Cells(1, 1).Select
End Sub
という簡単なものです。

どうしてもうまくいかなかった方は、参考ファイル成績一覧表マクロ(シート1枚版)暫定2を利用して下さい。

ではいよいよ成績一覧表マクロ(シート1枚版)暫定2の年間処理を3次元ループによって処理します。
第4話ではセルを利用して3次元処理を行います。
第5話ではグローバル3次元配列を宣言して、3次元配列を使用して3次元処理を実現します。

では3次元ループによって年間処理を実行するコードを書き換えてください。
まず、グローバルな3次元配列は用意しないで、セルのデータを利用して年間処理を行う処理方法を考えましょう。
年間成績一覧表に載せる各教科のデータは、3つの学期の平均とし、小数第1まで表示することにします。
したがって、シートのセルの設定も行ってください。
(あるいは、プログラムの方で小数第1まで表示できるように設定されてもかまいません。)
尚、現在のコード
Private Sub CommandButton10_Click()

  f41 '生徒の合計点・平均点の計算
  f42 '各教科等の合計点・平均点の計算
  f43 '各生徒の合否判定
  f44 '各生徒の講評
  f45 '各生徒の最高点の算出
  f46 '各生徒の最低点の算
  f47 '各教科と合計・平均の最高点の算出
  f48 '各教科と合計・平均の最低点の算出
  Cells(162, 1).Select

End Sub


Function g41(t As Byte, a As Byte)

  Dim i As Integer

  g41 = 0
  If t = 0 Then
    For i = 1 To 5
      g41 = g41 + Cells(147 + a, 1 + i)
    Next
  End If
  If t = 1 Then
    For i = 1 To 40
      g41 = g41 + Cells(147 + i, 1 + a)
    Next
  End If

End Function


Sub f41()

  Dim i As Byte, j As Byte

  '生徒の合計点・平均点の計算
  For i = 1 To 40
    Cells(147 + i, 7) = g41(0, i)
    Cells(147 + i, 8) = g41(0, i) / 5
  Next

End Sub


Sub f42()

  Dim i As Byte, j As Byte

  '各教科等の合計点・平均点の計算
  For i = 1 To 7
    Cells(188, 1 + i) = g41(1, i)
    Cells(189, 1 + i) = g41(1, i) / 40
  Next

End Sub

Sub f43()

Dim i As Byte, j As Byte

  '各生徒の合否判定
  For i = 1 To 40
    If Cells(147 + i, 7) >= 300 Then
      Cells(147 + i, 11) = "合格"
    End If
    If Cells(147 + i, 7) < 300 Then
      Cells(147 + i, 11) = "不合格"
    End If
  Next

End Sub


Sub f44()

  Dim i As Byte, j As Byte

  '各生徒の講評
  For i = 1 To 40
    If Cells(147 + i, 7) >= 350 Then
      Cells(147 + i, 12) = "あなたはかなり優秀です。"
    End If
    If Cells(147 + i, 7) < 350 And Cells(147 + i, 7) >= 300 Then
      Cells(147 + i, 12) = "おめでとう。"
    End If
    If Cells(147 + i, 7) < 300 And Cells(147 + i, 7) >= 200 Then
      Cells(147 + i, 12) = "合格まで後一歩です。"
    End If
    If Cells(147 + i, 7) < 200 Then
      Cells(147 + i, 12) = "かなりのがんばりが必要です。"
    End If
  Next

End Sub


Function g42(t1 As Byte, t2 As Byte, a As Byte)

  Dim i As Integer

  If t1 = 0 Then
    g42 = 0
    If t2 = 0 Then
      For i = 1 To 5
        If g42 < Cells(147 + a, 1 + i) Then g42 = Cells(147 + a, 1 + i)
      Next
    End If
    If t2 = 1 Then
      For i = 1 To 40
        If g42 < Cells(147 + i, 1 + a) Then g42 = Cells(147 + i, 1 + a)
      Next
    End If
  End If
  If t1 = 1 Then
    g42 = 500
    If t2 = 0 Then
      For i = 1 To 5
        If g42 > Cells(147 + a, 1 + i) Then g42 = Cells(147 + a, 1 + i)
      Next
    End If
    If t2 = 1 Then
      For i = 1 To 40
        If g42 > Cells(147 + i, 1 + a) Then g42 = Cells(147 + i, 1 + a)
      Next
    End If
  End If

End Function


Sub f45()

  Dim i As Byte, j As Byte

  '各生徒の最高点の算出
  Dim max As Integer
  For i = 1 To 40
    Cells(147 + i, 9) = g42(0, 0, i)
  Next

End Sub


Sub f46()

  Dim i As Byte, j As Byte

  '各生徒の最低点の算出
  Dim min As Integer
  For i = 1 To 40
    Cells(147 + i, 10) = g42(1, 0, i)
  Next

End Sub


Sub f47()

  Dim i As Byte, j As Byte

  '各教科と合計・平均の最高点の算出
  For i = 1 To 7
    Cells(190, 1 + i) = g42(0, 1, i)
  Next

End Sub


Sub f48()

  Dim i As Byte, j As Byte

  '各教科と合計・平均の最低点の算出
  For i = 1 To 7
    Cells(191, 1 + i) = g42(1, 1, i)
  Next

End Sub
をなるべく生かすというのを条件とします。


第3話へ 第5話へ

004
  


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

数学研究室に戻る