第2回 VBScriptの基本を押さえよう(その1) 文字列の入出力:基礎解説 演習方式で身につけるチェック式WSH超入門(2/3 ページ)
まずは基本中の基本、文字列の入出力からVBScriptの一歩を踏み出す。演習方式もいよいよスタート! 正解を考えながら多角的に学習しよう。
PCにせりふをしゃべらせる
まずはPCに何かせりふをしゃべらせてみよう。ここでは「ただの人間に興味はありません。」というせりふを表示させてみることにする。次のようなコードを考えよう。
Dim x
x = "ただの人間に興味はありません。"
MsgBox x
例えばmessage.vbsと名前を付けてファイルに保存し、このスクリプトを実行すると(実行方法については前回参照)、次のようなダイアログ(メッセージ・ボックス)が表示される。
このスクリプトが何をしているのかを詳しく説明しよう。
まず1行目で、「Dim<半角スペース>x」と記述することで、xという名前の「変数」を作成(宣言)している。変数とは、中にモノ(値)を自由に出し入れすることができる箱のようなものである。ここでは空の箱を用意していることになる。この行をDim文(Dimステートメント)という。この変数名のように、VBScriptでは、文字列以外は基本的に英数字と半角記号文字だけで記述するので間違えないようにしよう。付け加えておくと、VBScriptには大文字・小文字の区別はないので、dim Xなどと書いても同じことである。ちなみにDimは、「次元(配列)」を意味するDimensionという英単語の略である。VBScriptのキーワードは英単語が基になっているものが多い。
変数の概念図
変数は値を自由に出し入れできる箱のようなものである。この変数に名前を付けて、その名前でスクリプトからアクセス(値の読み書き)が行える。変数に値を入れる(セットする)ことを「代入」といい、値を取り出すことを「参照」という。
このxという変数に、=(イコール、代入演算子という)を用いて「ただの人間に興味はありません。」という文字列を入れる(代入する)のが2行目である。VBScriptでは、文字列(正式には「文字列リテラル」という)は" "(ダブル・クオーテーション)でくくるルールがあるので覚えよう。ここで「x = "ただの人間に興味はありません。"」とは、数学の方程式のように、「xの内容が"ただの人間に興味はありません。"と等しい」という意味ではないことに注意していただきたい。数学の =(イコール)とは意味が違い、「xに"ただの人間に興味はありません。"を代入する」という意味なのだ。なお、=の前後の半角スペースは省略可能である。
そしてメッセージ・ボックスとしてxという変数の中身を表示させているのが3行目である。ここではVBScriptのMsgBox関数を用いている。関数とは、ある処理を行い、その結果を返すための装置だと思えばよい。MsgBox関数は、与えた文字列(与える値のことを引数(ひきすう)という)をメッセージ・ボックスとして表示させる関数なので、このような結果になる。
このように、VBScriptは1つ1つの命令(文、もしくはステートメントという)を改行で区切って記述するのが基本である。
実をいえば、1行目のような変数宣言はVBScriptにおいては必須ではない。つまりこうも記述できるということだ。
x = "ただの人間に興味はありません。"
MsgBox x
Dimであらかじめxを宣言しなくても、変数xへの代入が発生した時点(上記1行目)で、VBScriptが自動的に変数xの箱を作ってくれるのだ。
ただし、1行減るのでラクなように見えるが、ここで手抜きをすると、変数を何個も使うような複雑なスクリプトを記述するときに、どんな変数を使っているのか分からなくなったり、タイプミスによって本来とは違う変数に値を代入してしまったりする危険がある。後々面倒なミスにつながりやすいので、いつも指定する癖を付けておいた方がよい。なお、行頭に「Option Explicit」と記述すると、宣言していない変数を使おうとするとエラーが発生するのでよりミスを見つけやすくなる。Explicitは「明示的な」という意味で、以後の暗黙の変数定義を許可しないという意味である。
Option Explicit
x = "ただの人間に興味はありません。"
MsgBox x
このように、Option Explicitを指定しているにもかかわらず、Dim xを省略したスクリプトを実行すると、エラーが発生し、次のようなダイアログが表示されてスクリプトの実行が停止される。
以後本稿では、常にOption Explicitを指定することにする。
では、上記のスクリプトをエラーが表示されないように実行するにはどうすればいいだろうか。次のコードは一部分が隠されているがクリックすると正解が表示される仕組みになっている(これが本稿が「チェック式」と名乗るゆえんだ)。答えを考えてから、目隠し部分を選択して、正解を確認してもらいたい。
なお、ここでは説明のために変数を使ったが、変数の宣言と代入を省略し、文字列をそのままMsgBox関数の引数に指定することも可能である。
MsgBox "ただの人間に興味はありません。"
複数行を表示させる
前出の例は1行だけの表示だったが、複数行をメッセージ・ボックスで表示させたいときは、次のようにすればよい。
Option Explicit
Dim x
x = "ただの人間に興味はありません。" & vbCrLf
x = x & "この中にデベロッパー、アーキテクト、IT Proがいたら、" & vbCrLf
x = x & "私のところに来なさい。以上。"
MsgBox x
2行目の変数宣言は同じだが、3行目で改行文字(vbCrLf)を加えている。vbCrLfは改行文字を示す「定数」(ある定まった値を示すもの)であり、VBScriptにあらかじめいくつか定義されている定数の1つである(なお、定数は自分で定義することもできる。それについては次回で述べる)。「ただの人間に興味はありません。」という文字列と改行文字を&(これを文字列連結演算子という)でつなぐと、お尻に改行文字がくっついた文字列がxに代入される。
4行目では、3行目で代入した文字列にさらに別の文字列を連結している。=の両側に同じxという変数があるが、右側のxは3行目の内容、左側のxは、3行目の内容と4行目で付け加えられる内容をつないだものが代入されることに注意してもらいたい。5行目も同様である。
このスクリプトを実行すると、このように改行付きで文字列が表示される。
なおこのスクリプトでも、次のようにすれば変数を使わずに表示することも可能だ。
MsgBox "ただの人間に興味はありません。" & vbCrLf & "この中にデベロッパー、アーキテクト、IT Proがいたら、" & vbCrLf & "私のところに来なさい。以上。"
ただしこれだと1行が長すぎるので、そういうときのために次のように行を分けて書くことができる。
MsgBox "ただの人間に興味はありません。" & vbCrLf & _
"この中にデベロッパー、アーキテクト、IT Proがいたら、" & vbCrLf & _
"私のところに来なさい。以上。"
このようにVBScriptでは、半角スペースと_(アンダースコア)を行末に書くことで、単一文を複数行に分けて書くことが可能だ。
以上のように、MsgBox関数を使えば、指定した文字列を表示できることがお分かりいただけたと思う。
Copyright© Digital Advantage Corp. All Rights Reserved.