VBScript の変数

普通、スクリプトの実行中に変更するプログラム情報は、コンピュータのメモリ上に保存されます。変数とは、そのメモリ上の位置を参照できる便利なプレースホルダです。たとえば、ある Web ページ上のオブジェクトをユーザーがクリックする回数を書き込むため、ClickCount プロシージャを呼び出す変数を作成するとします。このとき、変数が、コンピュータのメモリ上のどこに配置されるかを考える必要はありません。大切なことは、変数の値を参照したり、変更したりするときには、変数の名前を使用するということです。なお、Microsoft® Visual Basic® Scripting Edition (以下 VBScript) では、変数のデータ型は常にバリアント型 (Variant) です。

変数の宣言

変数は、スクリプトの中では、次のコード例のように Dim ステートメントPublic ステートメント、および Private ステートメントを使用して明示的に宣言します。次にコード例を示します。

Dim DegreesFahrenheit

変数が複数あるときは、次のコード例のようにカンマ (,) で区切って宣言します。次にコード例を示します。

Dim Top, Bottom, Left, Right

スクリプトの中で変数名を使えば、暗黙的な変数として変数を簡単に宣言できます。しかし、これは一般的に良い方法ではありません。なぜなら記述ミスをした場合、スクリプトの実行時に予期せぬ結果を引き起こす場合があるからです。こうした理由からすべての変数を明示的に宣言する必要があるときには、Option Explicit ステートメントを使用します。Option Explicit ステートメントは、スクリプト内の 1 行目のステートメントに記述します。

変数の名前付けの制限

変数の名前は、VBScript の標準的な名前付けの規則に従って指定してください。変数名は、次に示す条件を満たす必要があります。

  • 変数名の先頭文字は、アルファベットであること。
  • 変数名には、ピリオドを使用しないこと。
  • 変数名は、255 文字以内 (半角の場合) であること。
  • 変数宣言を行った適用範囲内で同じ変数名を複数使用しないこと。

変数の適用範囲と有効期間

変数の適用範囲は、変数を宣言した位置で決まります。一般にプロシージャ内部で変数を宣言した場合、その変数は宣言したプロシージャ内でのみ有効です。このような変数はプロシージャ レベル変数といい、ローカルな適用範囲 (スコープ) を持ちます。一方、プロシージャの外部で変数を宣言した場合、その変数は宣言したスクリプト内のすべてのプロシージャに対して有効です。このような変数はスクリプト レベル変数といい、スクリプト レベルでの適用範囲を持ちます。

変数の "有効期間" は、変数がどれくらいの期間有効であるかに依存します。スクリプト レベル変数の有効期間は、スクリプトで宣言されてからスクリプトの実行が終了するまでです。プロシージャ レベル変数の有効期間は、プロシージャ内にいる間だけです。プロシージャが終了すると、変数は破棄されます。ローカル変数の適用範囲は、変数宣言ステートメントがプロシージャを開始したときが始まりで、プロシージャが終了したときが終わりになります。変数は宣言されたプロシージャ内でのみ認識されるため、複数のプロシージャでそれぞれ同名のローカル変数を使用できます。

変数に値を代入する

変数に値を代入するには、次のコード例のように変数を式の左側に置き、変数に割り当てたい値を式の右側に置きます。次にコード例を示します。

B = 200

スカラ変数と配列変数

多くの場合、宣言した変数には、単に 1 つの値を割り当てることになります。このような単一の値を持つ変数は "スカラ変数" と言います。また、1 つの変数に 1 つ以上の関連する値を割り当てることもできます。このような連続する値を持つ変数は "配列変数" と言います。配列変数は、スカラ変数と同じ方法で宣言されます。違いは、配列変数の宣言では、変数名にかっこを付けて使用することです。次のコード例では、11 個の要素を持つ 1 次元配列が宣言されています。

Dim A(10)

VBScript では、すべての配列は、0 から起算されます。したがって、上の例では、かっこ内に指定された数が 10 であるにもかかわらず、実際には 11 個の要素を持つ配列が宣言されていることになります。0 起算配列では、配列の要素数は、常にかっこ内の数に 1 を加算した数になります。この種類の配列を "固定サイズ配列" と言います。

インデックスを持った配列を使用すると、配列の各要素にデータを割り当てることができます。0 から始まり、10 で終わる配列の場合、次のコード例のようにして配列の要素にデータを割り当てます。

A(0) = 256
A(1) = 324
A(2) = 100
 . . .
A(10) = 55

同様に、次のコード例のようにすると、インデックスを持った配列から必要とする配列要素のデータを取り出すことができます。次にコード例を示します。

 . . . 
SomeVariable = A(8) 
 . . . 

配列は、1 次元だけではなく、60 次元まで宣言できます。ただし、3 次元、4 次元と大きくなると理解が困難になってきます。複数の次元を持つ配列は、かっこ内の配列サイズ数をカンマ (,) で区切って宣言します。次のコード例では、6 行と 11 列から成る 2 次元配列の MyTable 変数が宣言されています。

Dim MyTable(5, 10)

2 次元配列では、最初の数字が行数で、2 番目の数が列数を表します。

スクリプトの実行中にサイズを変更する配列も宣言できます。このような配列は "動的配列" と言います。動的配列も Dim ステートメントまたは ReDim ステートメントを使用してプロシージャの最初に宣言します。ただし、動的配列の宣言には、次のコード例のように、かっこの中に配置する配列サイズと次元数がありません。次にコード例を示します。

Dim MyArray()
ReDim AnotherArray()

動的変数を使用するには、すぐ後に ReDim ステートメントを使用して次元数とサイズを設定する必要があります。次のコード例では、ReDim ステートメントは、動的配列の初期サイズに 25 を設定しています。続く ReDim ステートメントで配列のサイズを 30 に変更しています。サイズ変更を行った配列に要素を再保存するには Preserve キーワードを使用します。

ReDim MyArray(25)
 . . . 
ReDim Preserve MyArray(30)

動的配列でサイズを変更できる回数に制限はありません。ただし、配列のサイズを現在より小さく設定変更すると、配列要素に格納されているデータを失う場合があります。