技術情報
ステートメント
関数やサブルーチンを呼び出して実行します。

書式 Call 関数名 または サブルーチン名(引数1,...)
"関数名"で指定された関数または"サブルーチン名"で指定されたサブルーチンを呼び出します。

クラスを定義します。

書式 Class クラス名
  ...
End Class
クラスには、メソッドやプロパティを定義するコードを記述します。

定数を宣言します。
宣言する際は、スクリプトの先頭で宣言します。

書式1 Const 定数名 = 値
宣言したスクリプト内から参照可能な定数となります。

書式2 Private Const 定数名 = 値
書式1と等価です。

書式3 Public Const 定数名 = 値
すべてのスクリプトから参照可能な定数となります。

(例)
'定数の宣言
Const myConst = 123

変数配列の宣言に使用します。
スクリプトの先頭またはサブルーチン・関数内で使用できます。
スクリプトの先頭で宣言すると、そのスクリプト内のサブルーチン・関数から参照できるようになります。

書式1 Dim 変数名
変数を宣言します。

書式2 Dim 配列名
配列を宣言します。

Do ... Loop の間を繰り返し実行するステートメントです。
書式によって動作が若干異なります。
ループが繰り返されている途中でExit Doが実行されると、ループから強制的に抜けます。

書式1 Do While 条件式
  ~(コード)~
Loop
"条件式"が True の間 Do ... Loop の間が繰り返し実行されます。
"条件式"がまずはじめに評価されますので、最初の評価で False であれば、Do ... Loop の間は1回も実行されずに次に進んでしまいます。

書式2 Do Until 条件式
  ~(コード)~
Loop
"条件式"が True になるまで Do ... Loop の間が繰り返し実行されます。
"条件式"がまずはじめに評価されますので、最初の評価で True であれば、Do ... Loop の間は1回も実行されずに次に進んでしまいます。

書式3 Do
  ~(コード)~
Loop While 条件式
Do ... Loop の間が1回かならず実行されてから、"条件式"を評価し、True の場合は、再び Do ... Loop の間を実行します。

書式4 Do
  ~(コード)~
Loop Until 条件式
Do ... Loop の間が1回かならず実行されてから、"条件式"を評価し、 False の場合は、再び Do ... Loop の間を実行します。

(例)
'変数の宣言と代入
Dim i, j
i = 0
j = 1
'i が10以下である限り繰り返しループを実行します
Do While i <= 10
j = j * 2
i = i + 1
'j が 512 以上になった場合は、強制的にループを抜けます
If j >= 512 Then
  Exit Do
End If
Loop

固定長配列の要素を初期化したり、動的配列に割り当てられたメモリを解放します。

書式 Erase 配列名
初期化やメモリを解放する配列名を指定します。
固定長配列で値が数値の場合は、要素の値はすべて「0」になります。
固定長配列で値が文字列の場合は、要素の値はすべて「""」になります。
固定長配列で値がオブジェクトの場合は、要素の値はすべて「Nothing」になります。
動的配列の場合は、その配列を再び参照するには「Redim」で再定義する必要があります。
(例)
'配列の宣言と値の代入
Dim StrData(10)
StrData(0) = "あ"
StrData(1) = "い"
'配列を初期化します
Erase StrData

指定した文字列をVBScriptのコードとして実行します。

書式 Execute 文字列
複数のコードを記述する場合は、「:」(コロン)でつないだ文字列を指定するか、改行コードでつないだ文字列を指定します。

(例)
'変数の宣言と代入
Dim StrA, StrB
StrA = "あいうえお"
'コードを文字列で表現します
StrB = "MsgBox StrA"
'文字列で表現したコードを実行します
Execute StrB

指定した文字列をVBScriptのコードとして、スクリプトのグローバル名前空間で実行します。
Executeステートメントと同じですが、参照可能な名前空間がグローバルになる点が異なります。

書式 ExecuteGlobal 文字列
複数のコードを記述する場合は、「:」(コロン)でつないだ文字列を指定するか、改行コードでつないだ文字列を指定します。
このステートメントで実行中のコードに対しては、すべてのスクリプトから参照可能となります。

(例)
'変数の宣言と代入
Dim StrA, StrB
StrA = "あいうえお"
'コードを文字列で表現します
StrB = "MsgBox StrA"
'文字列で表現したコードを実行します
ExecuteGlobal StrB

サブルーチンや関数、またはループ制御中から抜け出します。

書式1 Exit Do
Do ... Loop 文から抜け出します。
Do ... Loop が入れ子になっている場合は、Exit Doがあるループの1つ外側に制御が移ります。

書式2 Exit For
For文 から抜け出します。
For文が入れ子になっている場合は、Exit ForがあるFor文の1つ外側に制御が移ります。

書式3 Exit Sub
Exit Function
Exit Property
サブルーチンや関数、プロパティプロシージャから抜け出します。

(例)
'変数の宣言
Dim i, x
x = 1
For i = 1 To 1000
x = x + i
'x が 2000 以上になったらFor文を抜けます
If x >= 2000 Then
  Exit For
End If
Next i

指定された配列やコレクションの各要素に対して、コードを繰り返し実行します。

書式 For Each 変数 In 配列
  ~(コード)~
Next
"配列"には固定長配列や動的配列名、またはコレクション(オブジェクト)名を指定します。
"変数"で各要素を1つずつ受け取って、For ... Next のコードを繰り返し実行します。

(例)
'配列の宣言と代入
Dim StrData(3)
StrData(0) = "東京"
StrData(1) = "名古屋"
StrData(2) = "大阪"
'配列の要素を取り出しながら実行します
For Each x In StrData
  MsgBox x
Next

指定した回数分だけコードを繰り返し実行します。

書式 For 変数 = 初期値 To 終了値 Step 増分
  ~(コード)~
Next
"変数"を"初期値"から"終了値"まで"増分"ずつ変化させながら、コードを繰り返し実行します。
"増分"に負の値を指定すると、初期値から減算していきます。
"増分"が「+1」の場合は、「Step 増分」は省略できます。

(例)
'配列の宣言
Dim i, j
j = 0
'1000回繰り返します
For i = 1 To 1000 Step 1
  j = j + i
Next

条件に合致した場合のみコードを実行する分岐ステートメントです。

書式 If 条件式1 Then
  ~(コード1)~
ElseIf 条件式2 Then
  ~(コード2)~
Else
  ~(コード3)~
End If
"条件式1"が True の場合は、コード1が実行されます。
"条件式2"が True の場合は、コード2が実行されます。
どちらの条件式も False の場合は、コード3が実行されます。
ElseIf文やElse文は省略することが可能で、"条件式1"のIf文のみで使用することができます。

(例)
'配列の宣言
Dim i, j
j = 0
'1000回繰り返します
For i = 1 To 1000 Step 1
j = j * i
'j が 1000 以上になった場合のみ実行
If j >= 1000 Then
  MsgBox "1000を超えました"
  Exit For
End If
Next

エラー処理の有効・無効を設定します。

書式1 On Error Resume Next
このステートメント以降は、エラー処理が無効となります。
エラーが発生してもエラーは無視され、処理が継続されます。

書式2 On Error Goto 0
このステートメント以降は、エラー処理が有効となります。
(通常の状態に戻ります)

(例)
On Error Resume Next
'エラーを発生させますが、
'処理は継続されます
Err.Raise 4
MsgBox Err.Description
On Error Goto 0

変数や配列の宣言を強制します。

書式 Option Explicit
このステートメントを記述しない場合は、変数や配列の宣言はしなくても構いませんが、プログラムが長くなるような場合には、プログラムの可読性を考慮すれば、このステートメントを記述して、変数や配列の宣言を強制しておく方がよいと思います。

(例)
'変数の宣言を強制します
Option Explicit
Dim IntData
IntData = 10

変数配列の宣言に使用します。
スクリプトの先頭やクラス内で使用できます。
そのスクリプト内のサブルーチン・関数から参照できるようになります。
サブルーチンや関数内では使用できません。

書式1 Private 変数名
変数を宣言します。

書式2 Private 配列名
配列を宣言します。

変数配列の宣言に使用します。
スクリプトの先頭やクラス内で使用できます。
すべてのスクリプトのすべてのサブルーチン・関数から参照できるようになります。
サブルーチンや関数内では使用できません。

書式1 Public 変数名
変数を宣言します。

書式2 Public 配列名
配列を宣言します。

乱数ジェネレータを初期化します。

書式 Randomize 数値
"数値"には、Rnd関数の乱数ジェネレータに引き渡す新しいシード値を指定します。
"数値"を省略すると、システムタイマから取得した値が使用されます。
シードが変わらなければ、Rnd関数は常に同じ乱数系列で乱数を発生しますので、通常このステートメントは、Rnd関数の前に実行するのが基本です。

(例)
'変数の宣言
Dim IntVal
'システムタイマの値をシード値とします
Randomize
'1~10の間でランダムな整数を生成します
IntVal = Int((10 * Rnd) + 1)

動的配列の要素数を変更します。

書式1 Redim 配列名(1次元要素数, ... , n次元要素数)
Dimステートメントで宣言された動的配列の要素数を変更します。
既に配列に値が格納されている場合は初期化されます。

書式2 Redim Preserve 配列名(1次元要素数, ... , n次元要素数)
Dimステートメントで宣言された動的配列の要素数を変更しますが、既に配列に格納されている値は保持されたまま要素数の変更ができます。
但し、2次元配列以上の場合には、n次元の要素数しか変更することができません。
また、要素数を小さくすると、はみ出している要素は削除されます。

(例)
'動的配列の宣言
Dim StrPos()
'要素数の設定
ReDim StrPos(2,5)

...
'値を保持したまま、要素数の再設定
ReDim Preserve StrPos(2,10)

コメントを記述します。

書式 Redim コメント

(例)
'この行はコメントです
Rem この行もコメントです

判定結果によって処理を振りわけます。

書式 Select Case 判別式
Case 条件1
  ~(コード1)~
Case 条件2
  ~(コード2)~
...
Case Else
  ~(コードn)~
End Select
"判別式"で判定を行い、Case で指定されているどの条件に合致しているかによって処理を振りわけます。
"Case Else"は、どの条件にも合致しない場合の処理を記述する必要がある場合に指定します。
"Case 条件"は少なくとも1つは指定しなければなりません。

(例)
'変数の値によって処理を振りわけます
Select Case StrCode
Case "0001"
  MsgBox "番号は0001です"
Case "0002"
  MsgBox "番号は0002です"
Case Else
  MsgBox "該当する番号はありません"
End Select

オブジェクトへの参照を変数に代入したり、プロシージャや関数への参照をイベントに関連づけます。

書式1 Set 変数 = オブジェクト
"オブジェクト"への参照を"変数"に代入します。
WSHのオブジェクトへの参照を代入するのに用いられます。
参照を解除する場合には、「Nothing」を代入します。

書式2 Set オブジェクト名.イベント名 = GetFef(プロシージャ名または関数名)
プロシージャまたは関数をオブジェクトのイベントとして割り当てます。

(例)
'変数の宣言
Dim FSO
'FileSystemObjectへの参照を代入します
Set FSO = CreateObject("Scripting.FileSystemObject")
...
'FileSystemObjectへの参照を開放します
Set FSO = Nothing

While ... Wend の間を繰り返し実行するステートメントです。
通常は、Do ... Loop を使うことで事足りますので、このステートメントは使いません。

書式 While 条件式
  ...
Wend
条件式が True の間ループを繰り返します。

(例)
'変数の宣言と代入
Dim IntCount
IntCount = 0
'ループ文
While IntCount < 100
  IntCount = IntCount + 1
Wend

1つのオブジェクトに対して一連の操作をする場合に使用します。

書式 With オブジェクト名
  ...
End With
1つのオブジェクトの様々なプロパティに値を代入するような場合、普通にコードを書くと、オブジェクト名をすべて指定しながら記述しなければなりません。
Withステートメントを使うと、オブジェクト名の記述は1回だけにして、プロパティに値を代入する部分だけ続けて記述することで省略可能となります。
但し、「End With」で終わるまで、1つのオブジェクトにしか処理できません。

(例)
'変数の宣言と代入
Dim FSO, Fd
Set FSO = CreateObject("Scripting.FileSystemObject")
'FileSystemObjectに対して、様々な操作をします
With FSO
If .DriveExists("D:\") = True Then
  MsgBox "ドライブは存在します"
End If
If .FolderExists("D:\Test") = True Then
  MsgBox "Testフォルダは存在します"
End If
End With