○一本道から分かれ道へ

プログラミングは、コンピュータにやらせたい順番に命令を一行一行書いていくというようにお話していました。
つまり、単純な一本道のプログラムです。
これでは臨機応変な対応ができるプログラムにはなりません。
そこで、ここでは「分岐」というものを勉強します。
これを利用すると、何らかの条件に応じて別々の処理をさせることができます。
但し、基本的にプログラムは上から下に順次実行されるという点では今までと同じです。

○条件分岐IF−THEN−ELSE文

ある条件が満たされた場合とそうではない場合に、 処理を変える方法としてこの条件分岐がある。
VBではいくつかの条件分岐用命令があるが、ここでは If ステートメント(IF文)を勉強しよう。

 

まずは 条件分岐IF文の文法(使用方法)を先にご覧頂こう。

If 「条件」 Then
  「条件が真(Yes)だった場合の処理」
Else
  「それ(真)以外の場合の処理」
End If

まずIF文全体を一つの固まりとした場合、IF文を使った一般的なプログラムは、
分岐前の処理 → IF文 →分岐後の処理
となる。 このような場合の全体的な流れを図にすると右図のようになる。

●「条件」部分;
 「条件」部分には論理式を書く(次項「比較演算子/論理演算子」参照)。

●Yesの場合の処理ブロック;
 ここでは「Then部」と呼ぶことにする。
 Then部は、条件がYes(True、真)つまり条件が満たされた場合のみに実行される処理ブロックである。
 Then部は、『If 「条件」 Then』行と『Else』行の間に記述する。

●Noの場合の処理ブロック;
 ここでは「Else部」と呼ぶことにする。
 Else部は、条件がYesではない時(No, False, 偽)つまり条件が満たされなかった場合のみに実行される処理ブロックである。
 Else部は、『Else』行と『End If』行の間に記述する。

※ なお、 ElseとElse部は省略可能。
 この場合、真の場合のみ、特別な処理を行ない、そうではない場合は、 特に何も行なわない時に使用される。

●各部の処理(ブロック)について;
 IF部、Else部には何を書くのであろうか?
 ここにはさせたい処理を通常のVBの文法にのっとって書く。
 何行でも構わない。させたい処理を正しい文法で表現していれば、基本的には何を書いても構わない。
 →ということは、Then部や、Else部にIF文を書いても構わないということである。

●「EndIF」は絶対に忘れないこと!!!
EndIfは、分岐から戻ってくる場所。無いと、永遠にIFの処理対象となってしまう。
勿論、IF文で処理した後に、更に何らかの処理をさせたい場合も当然あり、この場合は、EndIfの後に何行でも書き続ければよいだけ。同様にIF文の前にさせたいことがあれば先に何行でもよいので書いておけばよい。勿論この部分にIF文を使っても全く構わない。
各「処理」は、正しいVBであれば、何をどのくらい書いても構わない。 例えば、100行だろうと千行だろうと、またIF文だろうと構わない。

IF文による条件分岐は、二つに分岐することしかできない!!!
条件により二つの道に分かれ、最終的にまた一つに戻ってくることを、しっかりと頭に置いてプログラムを書くべし。
但し、各処理内にも更にIF文を書くことができるので、若干複雑にはなるが、 何分岐にでもできる。
必ずフローチャートを書いて考えること!!!

Elseの無いIF文は、ある条件に合致した場合のみに何か特別な処理を行わせたい場合に利用する。
ElseのあるIF文は、条件に合致した場合と、合致しない場合とで、別々の処理を行わせたい場合に利用する。
なお、Else命令を書きElse部に何のステートメントも書かなければElseがないIFと同じことになる。

○IF文の例

例;年齢による若さの診断メッセージ

先週の年齢計算のプログラムに追加・修正して、 年齢によりお酒が合法的に飲めるかを判断するプログラムとしよう。
もう一つラベルボックス(Label2)を用意して、そこにメッセージを出力させる。

n = Val( InputBox("please input your bone year") )
t = 2004 - n
If t < 20 Then
  Label2.Text = "NG"
Else
  Label2.Text = "OK"
End If
Label1.Text = t
もちろん上記プログラムはあくまでもサンプルであり、他に様々な書き方が考えられる。また上記では変数の宣言を省略している。

このプログラムでは、最初の2行で年齢を計算している。
IF文は3行目から始まり、条件として「t < 20」とtという変数の中身が20未満かどうかを判定させている。
もしこの条件にあっていれば、Then部である「Lable2.Text = "NG"」という一行が実行され、
もし条件にあっていなければ、Else部である「Lable2.Text = "OK"」という一行が実行される。
いずれかを実行したら、EndIfの次の最終行で計算した年齢の表示を行っている。

*ちょっと考えてみよう!?

○IF文の応用例

例;年齢による若さの診断メッセージ
上記 年齢によりお酒が合法的に飲めるかを判断するプログラムに追加・修正してみましょう。
ここでやりたいことは余計なお世話で、ご老人にあまりお酒を飲ませてはいけないという配慮をするプログラムを作ってみましょう。
例えば、20未満ならば「NG」、20歳以上(例えば)65歳以下ならば「OK」、それ以外(65歳以上)ならば「ほどほどに」というメッセージを表示させてみます。

n = Val( InputBox("please input your bone year") )
t = 2004 - n
If t < 20 Then
  Label2.Text = "NG"
Else
  If t < 65 Then
    Label2.Text = "OK"
  Else
    Label2.Text = "ほどほどに"
  End If
End If
Label1.Text = t
上記ではIF文のElse部の中にもう一つIF文があることに注意してください。
何度も言いますが、Then部、Else部は正しいプログラムであれば何も書いてもOKです。これをやってはいけない、あれをやってはいけないと言った制約は原則としてありません。
上記プログラムのフローチャートはかけますか?
なお、上記プログラムでは「インデント」を施しています。「インデント」とはワープロなどで先頭を右にずらすという時にも使います。
よく見ると、例えば4行目の「Label2.Text = "NG"」が少し右に寄っていますね。これがインデントで、手動でスペースを入れています。
このように内部のブロック全体をインデントすると、プログラムが見やすくなります。

 


○比較演算子/論理演算子

比較演算子/論理演算は、IF文などでの判定条件の際に必要となるもの。

*比較演算子

比較演算子は、左右の二つを比べて条件にあっているかどうかを判定するもの(教科書p.160参照)
>=, >, =, <, <=, <> といった比較演算子がある。
これらの記号(二文字から構成される場合は二文字で一つの記号とみなすこと。また二文字の間にスペースなどをいれて離してはいけない)の両端に値/変数を書いて比べる。

*論理演算子

論理演算子は、両端に論理式(比較演算子を使った式など)を書きいて複数の比較などを行わせる場合に利用する(教科書p.161参照)
And, Or [両端に論理式を書いてつなげて比べる]
Not [右に論理式を書いて否定する]

他にも、「Xor」がある。

*使用例

 

参考;
第5章 制御構造を学ぼう 
 5-1 Ifステートメントで条件判断を行う


[「A班」プログラミング基礎のTopに戻る]