第5講 もしもボックス(If文)
第5話 成績評価を成績一覧表に加える


前話問題

成績評価マクロ解答例
Private Sub CommandButton1_Click()
  Cells(6, 2) = "出席番号"
  Cells(6, 3) = "国語"
  Cells(6, 4) = "社会"
  Cells(6, 5) = "数学"
  Cells(6, 6) = "理科"
  Cells(6, 7) = "英語"
  Cells(6, 8) = "合計"
  Cells(6, 9) = "平均"
  Cells(6, 10) = "評価"
  Dim i As Byte, w As Integer
  For i = 1 To 10
    Cells(6 + i, 2) = i
    Cells(6 + i, 3) = Int(100 * Rnd())
    Cells(6 + i, 4) = Int(100 * Rnd())
    Cells(6 + i, 5) = Int(100 * Rnd())
    Cells(6 + i, 6) = Int(100 * Rnd())
    Cells(6 + i, 7) = Int(100 * Rnd())
  Next
  w = 0
  For i = 1 To 10
    w = w + Cells(6 + i, 3)
  Next
  Cells(17, 3) = w
  Cells(18, 3) = w / 10
  If w / 10 >= 50 Then
    Cells(19, 3) = "合格"
  Else
    Cells(19, 3) = "不合格"
  End If
  w = 0
  For i = 1 To 10
    w = w + Cells(6 + i, 4)
  Next
  Cells(17, 4) = w
  Cells(18, 4) = w / 10
  If w / 10 >= 50 Then
    Cells(19, 4) = "合格"
  Else
    Cells(19, 4) = "不合格"
  End If
  w = 0
  For i = 1 To 10
    w = w + Cells(6 + i, 5)
  Next
  Cells(17, 5) = w
  Cells(18, 5) = w / 10
  If w / 10 >= 50 Then
    Cells(19, 5) = "合格"
  Else
    Cells(19, 5) = "不合格"
  End If
  w = 0
  For i = 1 To 10
    w = w + Cells(6 + i, 6)
  Next
  Cells(17, 6) = w
  Cells(18, 6) = w / 10
  If w / 10 >= 50 Then
    Cells(19, 6) = "合格"
  Else
    Cells(19, 6) = "不合格"
  End If
  w = 0
  For i = 1 To 10
    w = w + Cells(6 + i, 7)
  Next
  Cells(17, 7) = w
  Cells(18, 7) = w / 10
  If w / 10 >= 50 Then
    Cells(19, 7) = "合格"
  Else
    Cells(19, 7) = "不合格"
  End If
  w = 0
  For i = 1 To 5
    w = w + Cells(7, 2 + i)
  Next
  Cells(7, 8) = w
  Cells(7, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(7, 10) = "合格"
  Else
    Cells(7, 10) = "不合格"
  End If
  w = 0
  For i = 1 To 5
    w = w + Cells(8, 2 + i)
  Next
  Cells(8, 8) = w
  Cells(8, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(8, 10) = "合格"
  Else
    Cells(8, 10) = "不合格"
  End If
  w = 0
   For i = 1 To 5
    w = w + Cells(9, 2 + i)
  Next
  Cells(9, 8) = w
  Cells(9, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(9, 10) = "合格"
  Else
    Cells(9, 10) = "不合格"
  End If
  w = 0
   For i = 1 To 5
    w = w + Cells(10, 2 + i)
  Next
  Cells(10, 8) = w
  Cells(10, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(10, 10) = "合格"
  Else
    Cells(10, 10) = "不合格"
  End If
  w = 0
   For i = 1 To 5
    w = w + Cells(11, 2 + i)
  Next
  Cells(11, 8) = w
  Cells(11, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(11, 10) = "合格"
  Else
    Cells(11, 10) = "不合格"
  End If
  w = 0
  For i = 1 To 5
    w = w + Cells(12, 2 + i)
  Next
  Cells(12, 8) = w
  Cells(12, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(12, 10) = "合格"
  Else
    Cells(12, 10) = "不合格"
  End If
  w = 0
   For i = 1 To 5
    w = w + Cells(13, 2 + i)
  Next
  Cells(13, 8) = w
  Cells(13, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(13, 10) = "合格"
  Else
    Cells(13, 10) = "不合格"
  End If
  w = 0
   For i = 1 To 5
    w = w + Cells(14, 2 + i)
  Next
  Cells(14, 8) = w
  Cells(14, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(14, 10) = "合格"
  Else
    Cells(14, 10) = "不合格"
  End If
  w = 0
   For i = 1 To 5
    w = w + Cells(15, 2 + i)
  Next
  Cells(15, 8) = w
  Cells(15, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(15, 10) = "合格"
  Else
    Cells(15, 10) = "不合格"
  End If
  w = 0
   For i = 1 To 5
    w = w + Cells(16, 2 + i)
  Next
  Cells(16, 8) = w
  Cells(16, 9) = w / 5
  If w / 5 >= 50 Then
    Cells(16, 10) = "合格"
  Else
    Cells(16, 10) = "不合格"
  End If
  w = 0
  For i = 1 To 10
    w = w + Cells(6 + i, 8)
  Next
  Cells(17, 8) = w
  Cells(18, 8) = w / 10
  Dim v As Single
  v = 0
  For i = 1 To 10
    v = v + Cells(6 + i, 9)
  Next
  Cells(17, 9) = v
  Cells(18, 9) = v / 10
  Cells(17, 2) = "合計"
  Cells(18, 2) = "平均"
  Cells(19, 2) = "評価"
End Sub

次の学習に入りましょう。
否定付きのもしもボックス(If~Else~文)は入れ子式に使うことによって、
場合分けを3つ以上にすることができます。
例えば、
If p < 30 then
  A
Else
  If p <50 then
    B
  Else
    C
  End If
End If
とすることができます。
これは、pが30未満ならAを実行し、
30未満でないなら、
  If p <50 then
    B
  Else
    C
  End If
を実行しなさいですが、どういう意味であるかおわかりですか。
答えは、30行下。































答え
If p < 30 then
  A
Else
  If p <50 then
    B
  Else
    C
  End If
End If
30未満なら、Aを実行して、
30以上50未満なら、Bを実行して、
50以上なら、Cを実行せよです。

解説
pが30未満ならAを実行します。
そして、そうでないなら
  If p <50 then
    B
  Else
    C
  End If
を実行するわけですが、30未満を否定すると30以上です。
ですから、30以上の条件の下
  If p <50 then
    B
  Else
    C
  End If
が実行されます。
そこに条件 p <50 が加わると30以上50未満ということになります。
そして、その条件 p <50 が否定されれば50以上です。
以上から答えの通り、
30未満なら、Aを実行して、
30以上50未満なら、Bを実行して、
50以上なら、Cを実行せよ。

となるわけです。



では、演習しましょう。
前々話問題マクロ


Private Sub CommandButton1_Click()
  Cells(6, 2) = Int(100 * Rnd())
  If Cells(6, 2) >= 60 Then
    Cells(8, 2) = "合格"
  Else
    Cells(8, 2) = "不合格"
  End If
End Sub
を改良して、
B9に70以上なら『優秀』、70未満50以上なら『普通』、50未満なら『努力が必要』

と表示できるようにしてください。

第4話へ 第6話へ

トップ

vc++講義へ

初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
vb講義へ
VB講義基礎へ
初心者のためのJava 入門 基礎から応用まで
数学研究室に戻る