Dim Arr() ' プログラム中で配列のサイズを変えたい場合には添え字を () にする ReDim Arr(1024) ' ReDim しないと使えない Arr(1) = "A-1" Arr(2) = "A-2" Arr(3) = "A-3" ' Arr の配列の要素数を表示 WScript.Echo UBound(Arr) - Lbound(Arr) + 1 ReDim Arr(4) ' 配列に配列を代入する Arr(1) = Array("A-4-0","A-4-1","A-4-2","A-4-3","A-4-4") WScript.Echo Arr(4)(1) ' Arr(4) に入っている配列の要素数を出す WScript.Echo UBound(Arr(4)) - Lbound(Arr(4)) + 1
実行結果は、
> Array.vbs 1025 ← ReDim Arr(1024) としたため 3 ではなく 0 〜 1024 の 1025個 A-4-1 ← Arr(4)(1) の出力結果 5 ← Arr(4) に入っている配列の要素数 (0 〜 4)
となる。 Arr(1)(1) は、意味としては (Arr(1))(1) だと思うが、こう書くと「実行時エラー: 型が一致しません。」となる。 もう少し技巧に走ると
Dim Arr Arr = Array("","","") Arr(1) = Array(1,2,3) WScript.Echo Arr(1)(1)
というのも可能(「2」が表示される)。これぞ可変配列か? でも、上と同じく(Arr(1))(1)はエラーになる。 以下のように書けば、Arr 配列の最後に Var を追加する array_push や、array_pop 関数ができあがる(PHP もどき)。
Dim Chr0 ' グローバル変数を宣言 Chr0 = Chr(0) ' Chr(0) を ^@ にする。(普通のテキストには含まれることがないので) Function array_push(ByRef Arr, ByVal Var) Arr = Split(Join(Arr, Chr0) & Chr0 & Var, Chr0) array_push = UBound(Arr) - LBound(Arr) + 1 End Function Function array_pop(ByRef Arr) Dim strTmp, n strTmp = Join(Arr, Chr0) n = InStrRev(strTmp, Chr0) array_pop = Mid(strTmp, n + 1) Arr = Split(Left(strTmp, n - 1), Chr0) End Function Dim Array_A, i Array_A = Array(0,1,2,3,4,5) WScript.Echo "===== 初期値 =====" WScript.Echo "UBound Array_A: " & UBound(Array_A) WScript.Echo "Array_A: " & Join(Array_A) array_push Array_A, 6 ' Array の最後に 6 を追加 WScript.Echo "===== array_push の結果" WScript.Echo "UBound Array_A: " & UBound(Array_A) WScript.Echo "Array_A: " & Join(Array_A) i = array_pop (Array_A) ' Array の最後から削除 WScript.Echo "===== array_pop の結果" WScript.Echo "返値: " & i WScript.Echo "UBound Array_A: " & UBound(Array_A) WScript.Echo "Array_A: " & Join(Array_A)
やはり、可変変数っぽい(^^;
&color():Invalid color: #123;