プロシージャに渡して、ReDimできるかどうかという実験です。
ざっと調べたところによると、どうも無理そうなのですが、
できない説
ReDimステートメントは、動的配列変数に対するメモリ領域の再割り当てを行います。配列の要素数や次元数を変更するために何回でも使うことができます。
プロシージャに配列を参照渡しで引き渡した場合、プロシージャ内で配列の再定義を行うことはできません。
VBAのReDimステートメントより
できる説
配列は必ず参照渡し(ByRef) になるので、渡された引数が固定長か可変長かは関数の呼び出し元に依存する。固定長の配列、未定義の動的配列、ReDim 済みの動的配列のいずれもが引数になり得るが、関数内では配列が可変長か固定長かを見分ける方法がないので、関数ごとに「動的配列のみ可」「長さ n の固定長配列もしくは Redim 済み動的配列のみ可」などのルールを設けてコーディングを行う。
Excel2000・VBA 引数が配列・戻り値が配列より
コード例:ByRefなら参照元も再定義できる?
以下のコードで試してみます。Sub test() Dim dary ReDim dary(1,20) Debug.Print UBound(dary, 2) '=> 20 test2 dary Debug.Print UBound(dary, 2) '=> 20 test3 dary Debug.Print UBound(dary, 2) '=> 33 End Sub Private Sub test2(ByVal ary) ReDim ary(10,2) Debug.Print UBound(ary, 2) '=> 2 ReDim ary(8,65) End Sub Private Sub test3(ByRef ary) ReDim ary(10,5) Debug.Print UBound(ary, 2) '=> 5 ReDim ary(8,33) End sub
結果:できる
以上のようなテストルーチンを作ったところ、予想に反して、動きました。
環境:Excel2016のVBA