第5講 IF文に挑戦しよう。

第3話 IF文の応用

今日は前回の解答の評価の欄を埋めてみたいと思います。
例えば、平均点が30点未満なら「かなりのがんばりが必要です。」
30点以上50点未満なら「後一歩の努力です。」
50点以上なら「がんばったね」
と評価の欄に書くとしたら、どうしたらよいでしょうか。
前回学んだIf P Then A Else Bでは条件は2つにしか分岐しませんから、
できないでしょうか。

解決方法は2つあります。
1つ目は、If P Then Aを複数回利用することです。
If Cells(7, 8) < 30 Then Cells(7, 10) = "かなりのがんばりが必要です。"
If Cells(7, 8) >= 30 Then Cells(7, 10) = "後一歩の努力です。"
If Cells(7, 8) >= 50 Then Cells(7, 10) = "がんばったね"
と記述すればよいのです。
逆順
If Cells(7, 8) >= 50 Then Cells(7, 10) = "がんばったね"
If Cells(7, 8) >= 30 Then Cells(7, 10) = "後一歩の努力です。"
If Cells(7, 8) < 30 Then Cells(7, 10) = "かなりのがんばりが必要です。"
でもいいでしょうか。
同じ結果が得られるような気がしますが、
逆順はだめです。
なぜなら、例えばCells(7, 8)=70
なら1行目と2行目のIF文が両方実行されて、
Cells(7, 10)には最終的に「後一歩の努力です。」と入力されてしまいます。
プログラムは上から順に実行されるからです。
また、
If Cells(7, 8) < 30 Then Cells(7, 10) = "かなりのがんばりが必要です。"
If Cells(7, 8) >= 30 Then Cells(7, 10) = "後一歩の努力です。"
If Cells(7, 8) >= 50 Then Cells(7, 10) = "がんばったね"
は、If P Then A Else Bを使えば、
If Cells(7, 8) < 30 Then Cells(7, 10) = "かなりのがんばりが必要です。" Else Cells(7, 10) = "後一歩の努力です。"
If Cells(7, 8) >= 50 Then Cells(7, 10) = "がんばったね"
の2行にすることもできます。

もう一つの解決方法は、IF文を入れ子式に使う方法です。
If Cells(7, 8) >= 50 Then Cells(7, 10) = "がんばったね" Else If Cells(7, 8) >= 30 Then Cells(7, 10) = "後一歩の努力です。" Else Cells(7, 10) = "かなりのがんばりが必要です。"
(ブラウザ上では複数行に渡って見えているかもしれませんが、上は本来1行です。)
この文は、複数行にして
If Cells(7, 8) >= 50 Then
    Cells(7, 10) = "がんばったね"
Else
    If Cells(7, 8) >= 30 Then
        Cells(7, 10) = "後一歩の努力です。"
    Else
        Cells(7, 10) = "かなりのがんばりが必要です。"
    End If
End If
と書いた方が、文の構造が明確になります。
(色は、Visual Basicでは黒です。色を付けたのは説明のためです。)
段組をつけているため、
入れ子式のIF文がどれなのか、もとのIF文がどれなのかが明らかになります。
ピンクで挟まれた部分が入れ子式に入れられたIF文であり、
赤で挟まれた部分がおおもとのIFです。
では皆さん、For文と組み合わせて40人文の評価が得られるように
解答を改良しましょう。
改良

第2話へ 第4話へ

講義トップへ

数学研究室に戻る