第5回 条件分岐(If…Then…End If命令):この時はこうして、あの時はああしろ
(学習目標)複雑なプログラムを実現する第一歩、If…Then命令を使えるようにする。
今までのプログラムは、単に上の命令から順に1つづつ下の命令へ実行が移っていきました。でも、状況によって枝分かれしたい場合もありますよね。これを条件分岐と言い、プログラム中ではIf…Then…命令で表わします(流れ図では菱形)。
5−1 If…Then….End If命令
例えば、InputBoxで年齢を入れてもらい、13歳未満の時だけ“NO”とメッセージボックスに表示する場合です。これを図で描くと図5.1のようになり、これは流れ図とか、フローチャートと呼ばれます。プログラムは図5.2です(何となく雰囲気は分かりますよね)。
If…Then…End If命令をもう少し詳しく見ていくと次の図5.3のようになっています。図5.4はIfの後ろの条件式の書き方を示しています。ここで注意して欲しいのは条件式の中の=です。これは等しいという意味であり、変数への書き込みではありません。また図5.2ではThenの後は1行(MsgBox “NO”)でしたが、これは何行でもかまいません。
今までのプログラムでは命令が左端から始まっていたのに、図5.2ではMsgBoxが少し右にずれた位置から始まっています。コンピュータは命令の前の空白を無視します。そのため、プログラムとしては左端に寄せてもよいのですが、プログラムを見やすくするため、命令を右に寄せて書きます(正式にはインデントと呼ばれます)。
5−2 If…Then…Else…End If 命令
もう少し複雑な条件分岐も可能です。例えば、InputBoxに“みぎ”と入力したらマーリンを右に、“ひだり”と入力したら左に移動させたい時の流れ図は4.5です。
図5.6がそのプログラムです。If…Then…Else…End Ifをもう少し正確に書くと次のようになります。
If 条件 Then
条件に一致した場合の処理
Else
条件に一致しない場合の処理
End If
となります。さて、図5.6の条件分岐命令と対応させて見てみましょう。
If data=”みぎ” Then の
data=”みぎ” が条件です。 前にも言いましたが、If 文の条件の中で使われる=は、等しいという意味です。要するに、InputBoxに みぎ と書き込まれたら、ということになります。
Merlin.MoveTo 300,200 は条件に一致した時の処理で、マーリンを右に動かします。
Elseは、それ以外という意味ですので、みぎ 以外の言葉を書き込むと、条件に一致しない場合の処理、ということになり、マーリンは左に動きます。
((ここから後は、勉強しないでよい))
図5.6では、ひだり、と書き込んでも左に動きますが、うえ、と書き込んでも左に動きますね。
どうしても“ひだり”と書き込んだ時だけ左に動かしたければ、
Merlin.MoveTo 200,200
data= InputBox ("みぎかひだりかを入力して")
If data="みぎ" Then
Merlin.MoveTo 300,200
ElseIf data="ひだり" Then
Merlin.MoveTo 100,200
Else
End If
MsgBox "終わり""
とします。ElseIfってのが出てきましたが、何となくやってること分かりますよね?
((ここまでは、勉強しないでよい))
プログラム5.1:InputBoxで数を入力し、奇数ならきすう、偶数ならぐうすうといわせよう。
‘マーリン登場のおまじない部は省略
data= InputBox ("数値を入力して下さい")+0
guki= data Mod 2
If guki=0 Then
Merlin.Speak "ぐうすう"
Else
Merlin.Speak "きすう"
End If
(補)If の後ろのdata Mod 2=0は、“dataを2で割った余りが0なら”という意味の条件です。
(問題5.1)“いぬ”、と入力したら“わん”と鳴き、“ねこ”と入力したら“にゃー”とマーリンに言わせよう。
答a51.vbs
(問題5.2)大吉、吉、凶しかない“おみくじ”を繕う。ヒント:乱数(1〜3)を使用
答a52.vbs
(問題5.3)次の式を満たすaをさがす。:InputBoxに与えられる次の式を満たす解を入力する。式à (7× a ÷ 2) – a + 6 =31
答えがあっていればOK、間違っていたらNOとメッセージボックスに表示。
答a53.vbs
(問題5.4)乱数(1〜4)を使ってマーリンを2回動かそう。
乱数が1ならMoveUp、2ならMoveDown、3ならMoveLeft、4ならMoveRightとする。
答a54.vbs