はじめに
VBScript(以下VBS)はWindowsに標準搭載されているスクリプト言語で、ランタイム等のインストールが不要で実行可能なため、チーム等で利用するようなスクリプトの作成に適しています。batファイルよりも高度な機能を兼ね備えていますし、コード自体もVisual Basicということで、Excel VBA等でも見慣れたコードで記述が可能となっているため、扱いやすいというのも特徴です。今回は、VBSの基礎として、環境作成と基本コードの実行方法等を学んでいきましょう。
レッスン1.VBSを使うのに必要なものを揃える
まず、VBSを実行するために必要な環境を整えていきます。テキストエディタは問いませんが、コーディングする場合には、Visual Studio Code(以下VS Code)があると、コード作成の効率が上がりますので、今回はVS CodeをVBSのエディタとして用いるための準備を行います。
尚、VBSで作成したスクリプトファイル単体で実行する際には必要なものはありません。
VS Codeはあらかじめインストールされているものとします。拡張機能ウィンドウから、「VBScript」と入力し、下記のプラグインをインストールしてください。似たようなプラグイン名が複数出てくると思いますので、間違えないよう注意してください。
次にデバッグ実行するために「Code Runner」というプラグインをインストールします。こちらも検索ウィンドウから検索し、下記のものをインストールしてください。
プラグインのインストールが終わったら、エラーメッセージの文字化けを防ぐため、設定を少し変更します。プラグインのギアのマークをクリックして、設定画面に移行します。
設定の中から、下記の「Code-runner: Run In Terminal」のチェックを入れてください。
上記2つのプラグインのインストールが完了したら、事前準備は終わりになります。
レッスン2. VBSファイルを実行してみる
では、環境が揃ったので、実際に簡単なファイルを実行してみましょう。新規ファイルを作成し、Ctrl+Sで空ファイルのまま保存します。ファイルの種類をVBScriptとし、ファイル名は「test」とつけておきます。
保存ができたら、簡単なコードを実行してみましょう。
msgbox "Hello World"
この1行だけを入れてみます。
コードが書けたら、文字コードを変更します。VBSではUTF-8に対応していないため、ファイルの文字コードを変更してあげる必要があります。この変更を忘れると、メッセージが文字化けしたり、そもそも実行できない場合もあります。
変更するには、まずVS Codeの右下の「UTF-8」というところをクリックします。
画面上部のコマンドパレットに、エンコードのメニューが表示されますので、「エンコード付きで再度開く」を押します。
エンコードの一覧から、Japanese(Shift JIS)を選択します。
もう一度ウィンドウの右下を確認し、文字コードが変わったことを確認しましょう。
これで実行する準備は整ったので、続いてファイルを実行します。右クリックで、「Run Code」を選びます。
下記のようにメッセージボックスが表示されたら成功です。OKを押して閉じてください。
1点注意として、ファイルの内容を変更したら実行前に必ずファイルを保存してください。実行は保存されたファイルで行われるため、変更した内容は保存後に反映されます。
レッスン3.基本文法を学ぶ
ここからはVBSの基本文法を学んでいきましょう。良く使われるものを中心に取り上げます。
変数の宣言を必須にする
VBSは初期状態では変数の宣言が要りません。しかしながら、変数を宣言しないで使うことは、規模が大きくなってきたときに混乱を招く原因になりますので、あまり推奨されません。
そこで、ファイルの冒頭に宣言を必須にするためのオプションを記述します。
Option Explicit
この1行はおまじないのように入れる習慣を付けておきましょう。
コマンドラインへの出力
先ほどはMsgBoxを使って変数の中身を確認していましたが、OKを押さなければならないのが面倒なので、コマンドライン上で完結するスクリプトの場合は下記のステートメントを使うと便利です。
WScript.Echo a
*”a” のところを適切な変数や文字列に置き換えてください
このステートメントを使うと、VS Codeでのデバッグや、コマンドラインからの実行の場合は、コマンドライン上に結果が表示されるようになります。一方で、スクリプトファイルをダブルクリックで実行する場合にはMsgBoxが出てきて結果が表示されるようになります。
この後の説明は、こちらのステートメントを使ったコードを用いるようにします。
変数
では、続いて変数です。VBSの変数は、Dimで宣言します。
コード:
Option Explicit Dim a a = "文字列" WScript.Echo a
実行結果:
文字列
VBSは型宣言しないので、直前に代入した型が有効になります。そのため、違う型として扱おうとするとエラーになります。
コード:
Option Explicit Dim a a = "文字列" a = a + 1 WScript.Echo a
実行結果:
c:\test.vbs(7, 1) Microsoft VBScript 実行時エラー: 型が一致しません。: '[string: "文字列"]'
型が違うというエラーが出ています。コードが大きくなると、型を忘れることがあるので、変数名を工夫するなどして対応すると良いでしょう。
条件分岐
条件分岐は一般的なプログラミング言語の仕様と同じく、if,else文を使います。
コード:
Option Explicit Dim a a = 1 if a = 0 Then WScript.Echo "0です" else WScript.Echo "0以外です" end if
実行結果:
0以外です
追加条件にはelseifを使います。
コード:
Option Explicit Dim a a = 2 if a = 0 Then WScript.Echo "0です" elseif a = 2 Then WScript.Echo "2です" else WScript.Echo "0以外です" end if
実行結果:
2です
繰り返し
VBSの繰り返しステートメントはいくつかありますが、その中でも代表的なFor NextとDo while/untilを紹介します。
まず、1つ目はFor Next文です。こちらは、ループの回数が決まっているケースで用いるステートメントです。初期値と終了条件を入れて実行します。
コード:
Option Explicit Dim a for a = 1 To 5 WScript.Echo a Next
実行結果:
1 2 3 4 5
続いて、Do while文です。こちらは回数を指定せず、条件が一致している間は繰り返す文です。外的な要因で変化する値を待つなど、ループ回数が動的に変わる処理を行う際に使います。For文のように変数は自動で変化しないので自分で処理を追加する必要があります。
コード:
Option Explicit Dim a Do while a < 100 a = a + 1 Loop WScript.Echo a
実行結果:
100
対してDo untilはDo whileと全く逆の条件で、条件が一致するまで繰り返すステートメントになります。こちらも回数が決まっていない場合に用います。先ほどと全く同じ結果となるように書き換えてみます。
コード:
Option Explicit Dim a Do until a >= 100 a = a + 1 Loop WScript.Echo a
実行結果:
100
不等号の向きが変わっています。このように、繰り返し分はまず最小の構成で動きを確認したうえで用いるようにすると分かりやすいです。
プロシージャ(関数)
では続いて、関数の作り方を学びます。VBSでは関数のことをプロシージャと呼びます。プロシージャは戻り値の有り無しで定義方法が変わりますので、その2つを学びましょう。
まずは、戻り値がないプロシージャの定義です。戻り値がないプロシージャはSubステートメントを使います。引数として文字列を与えるようにします。
コード:
Option Explicit printString "表示文字列" Sub printString( str ) WScript.Echo str End sub
実行結果:
表示文字列
続いて、戻り値があるプロシージャはFunctionステートメントを使います。こちらもコードを見てみましょう。
引数として与えた数値を加算して戻すプロシージャです。
コード:
Option Explicit Dim a a = 0 WScript.Echo addNum( a ) Function addNum( num ) num = num + 1 addNum = num End Function
実行結果:
1
戻り値として渡したい値はプロシージャ名に=で代入することで戻すことができます。
おわりに
今回はVBSの概要と基本的な文法について学んできました。Excel VBAで慣れている方は、ほぼ文法が同じなので難なくコーディングを進められると思います。次回「VBScriptの実践編」はもう少し進んだ内容を学び、より高度なスクリプトを作成できるようにしていきましょう。最後までお読みいただきありがとうございました。
No Comments