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

第4話 IF文の応用続き

今回は改良をさらに改良して評価を4段階、5段階にしてみましょう。
IF文も複雑になっていきますので、
段組を取ってIF文の構造を明確にしましょう。
まず、4段階から挑戦しましょう。
評価を次のようにしましょう。
30点未満「かなりの努力が必要です。」
30点以上50点未満「後一歩の努力です。」
50点以上80点未満「がんばりました。」
80点以上「あなたは天才です。」
(評価の文は、上の通りでなくて結構です。
むしろ、自分で工夫して楽しいものにしましょう。
前にも書きましたが、
プログラムは創造的な行為ですから、
あなたの独創が必要なのです。
ですから、解答例などはあくまで解答例です。
むしろ、解答例を理解し作った上で、
解答例とは違うプログラムも作るようにしましょう。

今回もIF文を入れ子式に使う方法と、
IF文を複数回使う方法と2つあります。
今回は入れ子式の方から作ってみましょう。

If Cells(7, 8) >= 80 Then
    Cells(7,10) = "あなたは天才です。"
Else
    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
End If

赤で囲まれたIF文が大元のIF文で、
ピンクで囲まれた部分が赤に入れ子式に入れられたIF文、
さらに、青で囲まれた部分がそのピンクに入れ子式に入れられたIF文です。
評価を4段階にするには、2重入れ子にすればいいのです。
では、上から順に文を追っていきましょう。

If Cells(7, 8) >= 80 Then
    Cells(7,10) = "あなたは天才です。"
平均点が80点以上なら、「あなたは天才です。」とCells(7,10)に記入しなさい。
Else
そうでなくて(つまり80点未満ならということになります。)、
If Cells(7,8) >= 50 Then
    Cells(7,10) = "がんばったね。"
平均点が50点以上なら、「がんばったね」とCells(7,10)に記入しなさい。
Else
そうでなくて(つまり、50点未満ならという個です。)、
If Cells(7 10) >= 30 Then
    Cells(7, 10) = "後一歩の努力です。"
平均点が30点以上なら、「後一歩の努力です。」とCells(7,10)に記入しなさい。
Else
そうでないなら(つまり30点未満なら)、
Cells(7, 10) = "かなりのがんばりが必要です。"
「かなりのがんばりが必要です。」とCells(7,10)に記入しなさい。
となります。

では、みなさんFor文の組み合わせて改良をさらに改良しましょう。
改良の改良

では次に、IF文を単純に重ねていく方法を考えてみましょう。
If Cells(7, 8) < 30 Then Cells(i, 10) = "かなりのがんばりが必要です。"
If Cells(7, 8) >= 30 Then Cells(i, 10) = "後一歩の努力です。"
If Cells(7 8) >= 50 Then Cells(i, 10) = "がんばったね。"
If Cells(7, 8) >= 80 Then Cells(i, 10) = "あなたは天才です。"
順序を入れ子式のときとは反対に書かないと正しい結果は得られません。
理由はおわかりでしょうか。
もし、逆順で
If Cells(7, 8) >= 80 Then Cells(i, 10) = "あなたは天才です。"
If Cells(7 8) >= 50 Then Cells(i, 10) = "がんばったね。"
If Cells(7, 8) >= 30 Then Cells(i, 10) = "後一歩の努力です。"
If Cells(7, 8) < 30 Then Cells(i, 10) = "かなりのがんばりが必要です。"
であったとしたらどうなるでしょうか。
例えば、Cells(7, 8)=85であったとすれば、
Cells(7,10)には「あなたは天才です。」と表記されねばならないのですが、
上の逆順のプログラムだと、
Cells(7,10)には「後一歩の努力です。」と入力されていまいます。
プログラムは上から順に実行されますから、
平均点が80点以上なら1行目から3行目までがすべて実行されて、
Cells(7,10)が「あなたは天才です。」→「がんばったね」→「後一歩の努力です。」
となっていってしまうからです。
If Cells(7, 8) < 30 Then Cells(i, 10) = "かなりのがんばりが必要です。"
If Cells(7, 8) >= 30 Then Cells(i, 10) = "後一歩の努力です。"
If Cells(7 8) >= 50 Then Cells(i, 10) = "がんばったね。"
If Cells(7, 8) >= 80 Then Cells(i, 10) = "あなたは天才です。"
なら、この現象は起きません。

第3話へ 第5話へ

講義トップへ

数学研究室に戻る