If文と式の評価についてLesson3ではIf...Then...Elseステートメントを取り上げ、フロー制御の基本を述べたいと思います。以下のスクリプトを実行してみてください。("「はい」か「いいえ」か「キャンセル」をクリックしてください。",,"Lesson3"このスクリプトは「はい」、「いいえ」、「キャンセル」の3つのボタンを持ったダイアログを表示させ、ユーザーがクリックしたボタンを表示させるというものです。1行目はおなじみ変数の宣言、Dimステートメントです。intMsgという整数値型の変数を宣言しています。二行目ではやはりおなじみのMsgBox関数が登場していますが、いつもとちょっと様子が違います。引数は、"「はい」か「いいえ」か「キャンセル」をクリックしてください。"という文字列で、第二引数はvbYesNoCancelで、第三引数は"Lesson3"という文字列を指定しており、各引数間は、カンマ(,)で区切られています。MsgBox関数は、第一引数にメッセージの内容を、第二引数にボタンの種類とアイコンの種類を、第三引数にダイアログのタイトルを指定できるようになっています。ここで第二引数の「vbYesNoCancel」とはなんでしょうか。これはダブルクォーテーション(")でくくられていないので、文字列ではありませんね。実はこれは「定数」といって、特定の値を持った文字です。vbYesNoCancelは、実際は3という値を表しています。(よって上のスクリプトのvbYesNoCancelという部分を3に変えても全く同じ動作をします。)VBSではこのような定数がいくつか定義されており(vbという接頭語がついたものが多い。ランゲージリファレンスに定数の一覧があるので見てみましょう)、スクリプトを見やすくする働きをしています。この場合、引数に3と指定するより、vbYesNoCancelと書いた方が、「はい、いいえ、キャンセルの3つのボタンを表示させる」という意味が明確になりますね。このMsgBox関数は、InputBox関数のように値を返すことができます(括弧がついていることに注意)。InputBoxでは「ユーザーの入力した文字列」が返値でしたが、MsgBox関数の返値は「ユーザーの押したボタンを表す整数値」です。よって、intMsgという変数には、押したボタンを表す整数値が代入されるわけです。intMsgには、次の三種類の数値が入る可能性があります。...「はい」を押した場合。...「いいえ」を押した場合。vbCancel(=2)...「キャンセル」を押した場合。押されたボタンが何であったかは、intMsgに入っている値を調べればわかるわけですが、それにはどうすればよいでしょうか。ここでようやくIf...Then...Elseステートメントの登場です。ありますが、これは「もしintMsgという変数が、vbYesという数に等しかったら、下の行を実行する」という意味です。その場合は4行目が実行され、"「はい」をクリックしました"というメッセージが表示されるわけです。ありますが、これは「もしintMsgという変数がvbYesと等しくなく、vbNoに等しかったら、下の行を実行する」という意味です。この場合は、6行目が実行され、"「いいえ」を..."と表示されます。最後に7行目にElseとありますが、これは上の2つの条件のいずれにも一致しない場合(intMsgがvbYesでもvbNoでもない場合。残る可能性はvbCancelに等しい場合ですね)は、下の行(8行目)を実行して、"「キャンセル」を..."が表示されるわけです。If」とありますが、これはIf...Then...Elseステートメントがここで終わりですよ、という目印です。その次の行は、もはやIf...Then...Elseステートメントとは関係がないので、intMsgが何であっても必ず実行されます。一つ、If...Then...Elseステートメントの例をあげます。実行してみて、その内容を吟味してみてください。これは、Date関数とTime関数で日付と時間を表示するスクリプトです。「いいえ」ボタンを押すと何も実行されない点に注意してください。If※MsgBox関数の第二引数は、省略するとOKボタンだけが表示されます。vbYesNo+vbQuestionのように、「ボタンの種類を示す数」と「表示するアイコンを示す数」を足し算して指定すると、両方の効果が同時に現れます。Lesson3はIf...Then...Elseステートメントというフロー制御ステートメントについて解説しました。次のLessonでは他のフロー制御ステートメントを紹介する予定です。