プログラミングは、コンピュータにやらせたい順番に命令を一行一行書いていくというようにお話していました。
つまり、単純な一本道のプログラムです。
これでは臨機応変な対応ができるプログラムにはなりません。
そこで、ここでは「分岐」というものを勉強します。
これを利用すると、何らかの条件に応じて別々の処理をさせることができます。
但し、基本的にプログラムは上から下に順次実行されるという点では今までと同じです。
ある条件が満たされた場合とそうではない場合に、 処理を変える方法としてこの条件分岐がある。
VBではいくつかの条件分岐用命令があるが、ここでは If ステートメント(IF文)を勉強しよう。
まずは 条件分岐IF文の文法(使用方法)を先にご覧頂こう。
If 「条件」 Then
「条件が真(Yes)だった場合の処理」
Else
「それ(真)以外の場合の処理」
End IfまずIF文全体を一つの固まりとした場合、IF文を使った一般的なプログラムは、
分岐前の処理 → IF文 →分岐後の処理
となる。 このような場合の全体的な流れを図にすると右図のようになる。●「条件」部分;
「条件」部分には論理式を書く(詳しくは「比較演算子/論理演算子」参照)。
<, <=, =, >=, > などが使える。
注意すべきは、A<Bなどのように二つを比べるのみで、
×⇒「A<B<C」と書いては駄目!●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と同じことになる。
例;年齢による若さの診断メッセージ
先週の年齢計算のプログラムに追加・修正して、 年齢によりお酒が合法的に飲めるかを判断するプログラムとしよう。
もう一つラベルボックス(Label2)を用意して、そこにメッセージを出力させる。もちろん上記プログラムはあくまでもサンプルであり、他に様々な書き方が考えられる。また上記では変数の宣言を省略している。
n = Val( InputBox("あなたの生まれた年(西暦)を入力してください") ) t = 2010 - 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の次の最終行で計算した年齢の表示を行っている。*ちょっと考えてみよう!?
- Label1.Textはこの位置にないといけないのであろうか?
例えば、Then部の中に入れてしまうとどうなるのか?- もう一つラベル(Label3)を用意して、Else部を「Lable3.Text = "OK"」としたらどうなるであろうか?
問題はない?必要性はある?- 最初の2行が数行に増え、かつ平成生まれの計算プログラムになっていたとしても問題はないだろうか
制御文
・If文