VBScript: 2次元配列を作成・操作・初期化する
VBScriptで2次元配列を扱う方法
(作成・操作・初期化)について解説します。
2次元配列は文字通り次元が2つある配列で、
Excelの表をイメージするとわかりやすいと思います。
ここでは下表の2行3列のデータを2次元配列に格納します。
田中 | 30 | 東京 |
鈴木 | 28 | 大阪 |
配列に格納する場合の該当インデックスは次のようになります。
配列(0, 0) | 配列(0, 1) | 配列(0, 2) |
配列(1, 0) | 配列(1, 1) | 配列(1, 2) |
2次元配列を作成
2行3列の2次元配列を作成して、 各要素に値を代入するサンプルコードは次のようになります。
Dim arr(1, 2) arr(0, 0) = "田中" arr(0, 1) = 30 arr(0, 2) = "東京" arr(1, 0) = "鈴木" arr(1, 1) = 28 arr(1, 2) = "大阪"
動的な2次元配列を作成
動的に2次元配列(多次元配列)を作成する場合は 注意が必要です。
VBScriptの「Redim Preserve」を使って動的に増やすことができるのは、 最後の次元の要素数だけです。
Redim Preserve 配列名(次元1の要素数, 次元2の要素数)
上の記述で増やせるのは「次元2の要素数」だけです。 「次元1の要素数」を増やそうとするとエラーが発生します。
次のコードは「次元1の要素数」を増やそうとしてエラーが発生します。
Dim arr()
ReDim arr(1, 2)
ReDim Preserve arr(2, 2) ' エラー: インデックスが有効範囲にありません。
次のコードは「次元2の要素数」(最後の次元の要素数)を増やそうとしているのでOKです。
Dim arr()
ReDim arr(1, 2)
ReDim Preserve arr(1, 3)
このようにVBScriptで「Redim Preserve」を使う場合は、 最後の次元の要素数しか増やせません。
ですから2次元配列で「行」を動的に増やしたい場合は
配列名(列数, 行数)
のように行数を後にするか、 「Preserve」を使わずに要素数が確定した段階で
Redim 配列名(行数, 列数)
のように記述する方法があります (Preserveを使わない場合は、それまでの配列の内容は破棄されます)。
2次元配列を初期化する
VBScriptで(2次元)配列を初期化する場合はEraseステートメントを使います。
Erase 配列
Eraseステートメントで初期化した結果は、 静的配列と動的配列で違うため注意が必要です。
静的配列の場合は全ての要素が空の文字列("")になります。 2次元配列の要素はそのまま残っていて、 参照すると空の文字列が返って来ます。
一方、動的配列の場合は配列に割り当てられていたメモリを解放します。 次のコードのようにErase後に2次元配列の要素を参照した場合、
Erase 配列名 WScript.Echo 配列名(0,1)
「インデックスが有効範囲にありません。」というエラーが発生します。