Lesson3 If文と式の評価について

 Lesson3ではIf...Then...Elseステートメントを取り上げ、フロー制御の基本を述べたいと思います。まずは以下のスクリプトを実行してみてください。

Dim intMsg
intMsg=MsgBox ("「はい」か「いいえ」か「キャンセル」をクリックしてください。",vbYesNoCancel,"Lesson3")
If intMsg=vbYes Then
	MsgBox "「はい」をクリックしました",vbInformation,"Lesson3"
ElseIf intMsg=vbNo Then
	MsgBox  "「いいえ」をクリックしました",vbInformation,"Lesson3"
Else
	MsgBox  "「キャンセル」をクリックしました",vbInformation,"Lesson3"
End If
MsgBox  "終わります。",,"Lesson3"

 このスクリプトは「はい」、「いいえ」、「キャンセル」の3つのボタンを持ったダイアログを表示させ、ユーザーがクリックしたボタンを表示させるというものです。

 まず1行目はおなじみ変数の宣言、Dimステートメントです。intMsgという整数値型の変数を宣言しています。

 二行目ではやはりおなじみのMsgBox関数が登場していますが、いつもとちょっと様子が違います。ここではMsgBox関数に第二引数、第三引数を指定しています。

 第一引数は、"「はい」か「いいえ」か「キャンセル」をクリックしてください。"という文字列で、第二引数はvbYesNoCancelで、第三引数は"Lesson3"という文字列を指定しており、各引数間は、カンマ(,)で区切られています。MsgBox関数は、第一引数にメッセージの内容を、第二引数にボタンの種類とアイコンの種類を、第三引数にダイアログのタイトルを指定できるようになっています。

 さて、ここで第二引数の「vbYesNoCancel」とはなんでしょうか。これはダブルクォーテーション(")でくくられていないので、文字列ではありませんね。また、変数でもありません。実はこれは「定数」といって、特定の値を持った文字です。vbYesNoCancelは、実際は3という値を表しています。(よって上のスクリプトのvbYesNoCancelという部分を3に変えても全く同じ動作をします。)

 VBSではこのような定数がいくつか定義されており(vbという接頭語がついたものが多い。ランゲージリファレンスに定数の一覧があるので見てみましょう)、スクリプトを見やすくする働きをしています。この場合、引数に3と指定するより、vbYesNoCancelと書いた方が、「はい、いいえ、キャンセルの3つのボタンを表示させる」という意味が明確になりますね。

 さて、このMsgBox関数は、InputBox関数のように値を返すことができます(括弧がついていることに注意)。InputBoxでは「ユーザーの入力した文字列」が返値でしたが、MsgBox関数の返値は「ユーザーの押したボタンを表す整数値」です。よって、intMsgという変数には、押したボタンを表す整数値が代入されるわけです。
 つまり、intMsgには、次の三種類の数値が入る可能性があります。

vbYes(=6) …「はい」を押した場合。
vbNo(=7) …「いいえ」を押した場合。
vbCancel(=2)…「キャンセル」を押した場合。

 押されたボタンが何であったかは、intMsgに入っている値を調べればわかるわけですが、それにはどうすればよいでしょうか。ここでようやくIf...Then...Elseステートメントの登場です。

 3行目で、If intMsg=vbYes Then とありますが、これは「もしintMsgという変数が、vbYesという数に等しかったら、下の行を実行する」という意味です。すなわちその場合は4行目が実行され、"「はい」をクリックしました"というメッセージが表示されるわけです。

 次に5行目では ElseIf intMsg=vbNo Then とありますが、これは「もしintMsgという変数がvbYesと等しくなく、vbNoに等しかったら、下の行を実行する」という意味です。この場合は、6行目が実行され、"「いいえ」を…"と表示されます。

 最後に7行目にElseとありますが、これは上の2つの条件のいずれにも一致しない場合(intMsgがvbYesでもvbNoでもない場合。すなわち残る可能性はvbCancelに等しい場合ですね)は、下の行(8行目)を実行して、"「キャンセル」を…"が表示されるわけです。

 その次の行に「End If」とありますが、これはIf...Then...Elseステートメントがここで終わりですよ、という目印です。その次の行は、もはやIf...Then...Elseステートメントとは関係がないので、intMsgが何であっても必ず実行されます。

 もう一つ、If...Then...Elseステートメントの例をあげます。実行してみて、その内容を吟味してみてください。これは、Date関数とTime関数で日付と時間を表示するスクリプトです。「いいえ」ボタンを押すと何も実行されない点に注意してください。

Dim intMsg
intMsg=MsgBox("時刻と日付を表示しますか?",vbYesNo+vbQuestion,"Lesson3")
If intMsg=vbYes Then
	MsgBox Time,,"時刻"
	MsgBox Date,,"日付"
End If    

※MsgBox関数の第二引数は、省略するとOKボタンだけが表示されます。また、vbYesNo+vbQuestionのように、「ボタンの種類を示す数」と「表示するアイコンを示す数」を足し算して指定すると、両方の効果が同時に現れます。


Lesson3はIf...Then...Elseステートメントというフロー制御ステートメントについて解説しました。次のLessonでは他のフロー制御ステートメントを紹介する予定です。


Home Up Back Next