第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ならMoveUp2ならMoveDown、3ならMoveLeft、4ならMoveRightとする。

a54.vbs