多次元配列使用時のエラー対処方法|VBA

   

インデックスが有効範囲にありません

インデックスが有効範囲にありません

多次元配列の要素数をReDim Preserveで変更(既存データを保持)する場合は最終次元しか変更できません。
ReDimのみ(既存データを破棄)は可能です。

NGパターン
Dim arrays() As String
ReDim arrays(1, 128)

ReDim Preserve arrays(0, 64)
解決方法
Dim arrays() As String
ReDim arrays(1, 128)

ReDim Preserve arrays(1, 64)

この場合、[0, 0]-[0, 64], [1, 0]-[1, 64]までの二次元配列になります。

配列はすでに宣言されています

配列はすでに宣言されています

静的な配列が1回しか宣言できないために発生します。次元を変更できるのは動的な配列だけです。

NGパターン
Dim arrays(1, 128) As String
ReDim arrays(1, 128)
解決方法
Dim arrays() As String
ReDim arrays(1, 128)

この配列は固定されているか、または一時的にロックされています

この配列は固定されているか、または一時的にロックされています

静的な配列を引数として渡した場合、コールされた関数側で引数の配列に対して、ReDimReDim Preserveを実行すると発生します。

2次元配列を引数に渡す方法

多次元配列を引数として受け取る方法です。通常の配列と同じ様に受け取って使用します。

呼び出し側

Dim arrays() As String
ReDim arrays(1, 128)
Call FillArrays(arrays)
受け取り側
Function FillArryas(ByRef arrays() As String)
    arrays(0, 1) = "01"
End Function

 - VBA