VBAで配列の長さを指定するのに変数を使う方法

VBAで配列の長さを指定するとき、通常は数値を直接入力します。

1dim ary(3) as variant

配列の要素数が条件によって変化する場合は変数を使用して、配列の要素数を確保したいときがあります。

 1Option Explicit
 2Sub usevarinArylength()
 3
 4  Dim length As Long
 5  Dim ret As Long
 6  length = 3
 7  ret = MsgBox("要素数の変更を行いますか?", vbYesNo + vbQuestion, "要素数の変更")
 8  If ret = vbYes Then
 9    length = 4
10  End If
11
12  Dim ary(length) As Variant 'lengthは条件によって変わる
13  ary(0) = 0
14
15  MsgBox ary(0)
16
17End Sub

しかし、変数を使用してDimで配列を宣言すると「コンパイルエラー:定数式が必要です。」とエラーになります。

変数を使用して配列の要素数を確保するには一旦Dimで要素を確保せず配列を宣言します。
そのあと、Redimを使用して配列の要素数を確保します。

 1Option Explicit
 2Sub usevarinArylength2()
 3
 4  Dim length As Long
 5  Dim ret As Long
 6  length = 3
 7  ret = MsgBox("要素数の変更を行いますか?", vbYesNo + vbQuestion, "要素数の変更")
 8  If ret = vbYes Then
 9    length = 4
10  End If
11
12  Dim ary() As Variant 'lengthは条件によって変わる
13  ReDim ary(length) As Variant
14  ary(0) = 0
15
16  MsgBox ary(0)
17
18End Sub

関連ページ