第6講 Functionプロシージャ

第5話 Functionプロシージャによる成績一覧表マクロの改良

Funcitonプロシージャ成績一覧表マクロの改良例
Private Sub CommandButton1_Click()

  f1 '生徒の合計点・平均点の計算
  f2 '各教科等の合計点・平均点の計算
  f3 '各生徒の合否判定
  f4 '各生徒の講評
  f5 '各生徒の最高点の算出
  f6 '各生徒の最低点の算
  f7 '各教科と合計・平均の最高点の算出
  f8 '各教科と合計・平均の最低点の算出

End Sub


Function g1(a As Byte)

  Dim i As Integer

  g1 = 0
  For i = 1 To 5
    g1 = g1 + Cells(6 + a, 1 + i)
  Next

End Function


Sub f1()

  Dim i As Byte, j As Byte

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

End Sub


Function g2(a As Byte)

  Dim i As Integer

  g2 = 0
  For i = 1 To 40
    g2 = g2 + Cells(6 + i, 1 + a)
  Next

End Function


Sub f2()

  Dim i As Byte, j As Byte

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

End Sub


Sub f3()

  Dim i As Byte, j As Byte

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

End Sub

Sub f4()

  Dim i As Byte, j As Byte

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

End Sub


Function g3(a As Byte)

  Dim i As Integer

  g3 = 0
  For i = 1 To 5
    If g3 < Cells(6 + a, 1 + i) Then g3 = Cells(6 + a, 1 + i)
  Next

End Function


Sub f5()

  Dim i As Byte, j As Byte

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

End Sub


Function g4(a As Byte)

   Dim i As Integer

   g4 = 500
   For i = 1 To 5
     If g4 > Cells(6 + a, 1 + i) Then g4 = Cells(6 + a, 1 + i)
   Next

End Function


Sub f6()

  Dim i As Byte, j As Byte

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

End Sub


Function g5(a As Byte)

  Dim i As Integer

  g5 = 0
  For i = 1 To 40
    If g5 < Cells(6 + i, 1 + a) Then g5 = Cells(6 + i, 1 + a)
  Next

End Function


Sub f7()

  Dim i As Byte, j As Byte

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

End Sub


Function g6(a As Byte)

  Dim i As Integer

  g6 = 500
  For i = 1 To 40
    If g6 > Cells(6 + i, 1 + a) Then g6 = Cells(6 + i, 1 + a)
  Next

End Function


Sub f8()

  Dim i As Byte, j As Byte

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

End Sub

今回、横の合計を求めるFuncitonプロシージャg1、縦の合計を求めるFunctionプロシージャg2、
横の最高点を求めるFuncitonプロシージャg3、横の最低点を求めるFunctionプロシージャg4
縦の最高点を求めるFunctionプロシージャg5、縦の最低点を求めるFunctionプロシージャg6
の6個Functionプロシージャを用意しましたが、
実はうまく工夫すると、
合計を求めるFuncitonプロシージャg1、最高点を求めるFunctionプロシージャg2、
最低点を求めるFunctionプロシージャg3の3つにまとめることが出来ます。
ヒントは、Function g1(t As Byte,a As Integer)と引数を2つにして、
tには0か1を入れます。0のときは横、1のときは縦の意味を持たせれば、まとめられます。
もちろん、If文を使います。

さらに、引数をもう一つ用意してやればg2とg3は1つにまとめることも出来ます。
Function g2(t1 As Byte,t2 As Byte,a As Integer)とし、
t1もt2も0,1のみを入れるものとします。意味については、ご自分で考えてください。

3つにまとめる場合と2つにまとめる場合それぞれについて考えましょう。

第4話へ 第6話へ

004


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

数学研究室に戻る