| 基礎解説 チェック式 WSH入門 第3回 2.WSHで条件分岐処理をするMicrosoft MVPVisual Developer - Scripting 牟田口 大介 2006/07/27 |
![]() |
|
Page1
Page2
|
|
スクリプト中で条件分岐をさせよう:If もしも
スクリプトを書いていて、ある条件ではAというコードを、別の条件ではBというコードを実行させたい、つまり条件分岐をさせたいケースが多々ある。そこで登場するのがIf〜Then〜Elseステートメントだ。実例で使い方を具体的に説明していこう。
Option Explicit |
ここではIf〜Then〜Elseステートメントを用いて、xとyの大小を確認している。Ifの後に条件を書くと、その条件が満たされるとき(真、Trueであるとき)、Thenの後のステートメントが実行される。この例では、条件に「x > y」を指定しているが、これは「xがyより大きい」という意味である。全体として、「xがyより大きければ、メッセージ・ボックスを表示する」という意味になる。ここではxに5、yに3を代入しており、条件「x > y」は真になるので、メッセージ・ボックスが表示される。
ここで、xとyの値を逆にすれば、すなわちxに3、yに5を代入すれば、条件「x > y」は満たされなくなり(偽、Falseとなる)、メッセージ・ボックスは表示されなくなるので試してもらいたい。
なお、「より大きい」を意味する「>」は比較演算子という。ほかの比較演算子には次のようなものがある。
| 比較演算子 | 意味 |
|
<
|
より小さい |
|
<=
|
以下 |
|
>
|
より大きい |
|
>=
|
以上 |
|
=
|
等しい |
|
<>
|
等しくない |
| 比較演算子 | |
同じ条件式を使って、今度はxとyの値の大小によって、異なったメッセージを表示する例を考えよう。
Option Explicit |
このようにIf〜Then〜Elseステートメントを使うと、条件式「x > y」が成り立つ場合は、Thenの後の文が実行される。条件式が成り立たない場合(x <= y の場合)はElseの後の文が実行される。この場合、xはyより大きいので「5は3より大きい。」というメッセージ・ボックスが表示されることになる。
この例で、xとyの値を入れ替えると(x=3、y=5とすると)、「3は5以下だ。」というメッセージ・ボックスが表示されることが分かる。
なお、このコードは「ブロック形式の構文」というものを用いると、次のように書き直せる。
Option Explicit |
前のように、1行に複数の要素を詰め込むより、ブロック形式で表記した方がコードを見やすいことがお分かりいただけるかと思う。ブロック形式を使うときは、最後にEnd Ifでステートメントを閉じる必要がある。なお、ブロック形式を使うときは、この例のようにタブや半角スペースで文(ここではMsgBox関数の文)の行頭を字下げすることで、より読みやすいコードが記述できる。
ユーザーの問い合わせによって分岐する
今度は、ユーザーの入力内容によってコードを分岐させる例を見ていこう。
Option Explicit |
本題に入る前に、ここで2つのことを説明しておく。1つは、2行目などで用いている「コメント行」である。コード中に何かコメント(コード上には記載するが、実行には影響しない文字列)を記述しておきたいときは、'(シングル・クオーテーション)を書き、その後に記述する。これは本文中のどこにでも使え、' から改行(その行の最後。行末)まではコメントと見なされ実行はされない。2行目のようにコメントだけの行があってもいい。コメントは、何をするコードなのかという説明などのメモに使うことが多い。
もう1つは、5行目「Const TITLE = "ダイアログ・クイズ" 」というところで、Constステートメントを用いて定数を定義している点である。ここではTITLEという定数を「ダイアログ・クイズ」という文字列になるように定義している。この文字列は後で何回も呼び出すので、1度定義してしまえば同じ文字列を何度も書かなくて済むという利点がある。
定数と変数の使い分けだが、コードの途中で値を変更しないものは定数、代入などによって値が変わり得るものは変数として宣言するのがよい。
本題に戻って、8行目でMsgBox関数の戻り値をMsgという変数に代入している。ここでMsgBox関数のヘルプを引くと、次のような記述がある。
MsgBox(prompt[, buttons][, title][, helpfile, context]) |
Inputbox関数のときと読み方は同様だが、これを見ると、省略は可能だが第2引数にダイアログに表示するボタンを指定できることが分かる。その後にダイアログ・タイトルを指定する引数もある。今回はこれらを使っている。
「MsgBox("「アルプスの少女○○ジ」○○のところになにがくる?", vbQuestion + vbYesNoCancel,TITLE)」のように、第2引数のメッセージ・ボックスに「?」マーク(問い合わせメッセージ・アイコン)を出すという意味の定数vbQuestionと「はい」「いいえ」「キャンセル」の3つのボタンを表示させるという意味の定数vbYesNoCancelの合計を指定している。合計を指定することで、それぞれの定数が指定する外観を同時に指定したことになる。またダイアログ・タイトルには、先ほど宣言した定数TITLEを指定する。これにより、表示されるメッセージ・ボックスは次のようなものになる。
![]() |
| ボタンが3つあるメッセージ・ボックス |
| ユーザーに回答を選択させるタイプのメッセージ・ボックスを表示した。 |
このメッセージ・ボックスで押したボタンの種類が、MsgBox関数の戻り値となる。具体的には「はい」をクリックすると6、「いいえ」をクリックすると7、「キャンセル」をクリックすると2が戻り値となる。が、これらの数字はそれぞれvbYes、vbNo、vbCancelという定数で定義されているので、実際の値は知らなくてもコードを記述できる。
これらの戻り値によって、次に表示させる結果のメッセージ・ボックスを分岐させるのに、If〜Then〜Elseステートメントを用いている。
最初のIfの後の条件式“Msg = vbYes”が真の場合、1つ目のThen以下のステートメントが実行される。ここで用いられる比較演算子(=)は、算数の = と同じ意味で、「MsgとvbYesが等しい」という意味である。比較演算子(=)は、前回説明した代入演算子(=)と同じ記号だが、意味が違う点に注意していただきたい。もしMsg = vbYesではない場合は、次のElseIfの後の条件式Msg = vbNoが評価される。これが真の場合、2つ目のステートメントが実行される。さらにvbYesでもvbNoでもなかった場合(vbCancelの場合は)、Elseの後のステートメントが実行されるというわけである。Elseはどの「If」にも「ElseIf」にも掛からなかった場合実行されるという意味なのだが、今回のようにどの値か分かっている場合は、「ElseIf Msg = vbCancel Then」と記述してもよい。
![]() |
| ダイアログ・クイズの実行 |
| このようにユーザーのクリックしたボタンに応じて条件分岐を行っている。 |
結果を表示させるためのMsgBox関数の第2引数には、それぞれvbInformation(情報メッセージ・アイコン)、vbCritical(警告メッセージ・アイコン)、vbExclamation(注意メッセージ・アイコン)を指定して、それぞれのアイコンを表示している。MsgBox関数のほかの定数についてはヘルプを参照してもらいたい。
InputBox関数の入力値を判定する
If〜Then〜Elseステートメントを使いこなすために、次のような例題を考えてみてもらいたい。人間の肥満度を示すBMI(Body Mass Index)というものがある。BMIは体重(kg単位)を身長(m単位)の2乗(2回掛け合わせたもの)で割ったものであり、BMIが25以上の場合を肥満、BMIが18以下の場合をやせ、そのほかの場合は標準的であるとするものである。ここではInputBox関数を使って、ユーザーに身長と体重を入力させ、BMIを求める。そして、その値が肥満かやせか標準かを判定し、結果を表示するスクリプトを書いてみよう。
Option Explicit
|
6行目と7行目でInputBox関数を用い、身長と体重を入力させ、それぞれ変数に値を代入している。10行目ではBMIを定義に従って計算している。なお、/ と * の計算の優先順位は同じであるため、*を先に計算させるために( )を使っていることに注意してもらいたい。そして13行目からIf〜Then〜Elseステートメントを用い、計算したBMIの値によって条件分岐している。
このスクリプトを実行すると、入力ダイアログが2回表示されるが、いずれも数値を入力するようにする。さもないと「型が一致しません」というエラーが発生してしまう。なお、このエラーの回避方法については次回以降に述べる予定である。
今回は算術演算子を用いた計算、If〜Then〜Elseステートメントを用いた条件分岐の方法について説明した。次回は、InputBox関数とMsgBox関数以外の関数を取り上げながら、VBScriptのもう少し高度な使い方を説明する予定である。![]()
| INDEX | ||
| [基礎解説]チェック式 WSH入門 | ||
| 第3回 VBScriptの基本を押さえよう(その2) 計算と分岐処理 | ||
| 1.WSHで計算処理をする | ||
| 2.WSHで条件分岐処理をする | ||
| 基礎解説 |
ホワイトペーパー(TechTargetジャパン)
- 第207話 究極の人事システム (2010/2/9)
部長、わが人事部が開発した究極の人事評価システムがついに完成しました! これで不要な社員が一発で分かります! - WindowsTIPS (2010/2/5)
− netshコマンドでTCP/IPのパラメータを設定する
− Virtual PC 2007の共有NATで利用可能なアドレス範囲
− スタンバイ復帰でパスワード入力を要求されないように - 仮想環境でActive Directoryを利用する (2010/2/4)
仮想環境にADをインストールすれば、自由にActive Directoryドメイン・ネットワークを構築して実験できる - 第206話 バナー広告案 (2010/2/2)
いまどきWebマーケティングが不可欠なのは分かるが、強烈な競合に並べてバナーなんか出して、勝ち目はあるのか?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |









