要素数を変更できる動的配列は2通りの定義方法があります。
1.括弧内の要素数を省略する
この場合、使用する前に要素数を再定義する必要があります。
Dim ary() As String
(省略)
Redim ary(10)
2.ヴァリアント型として定義する
この場合はarray関数で配列を代入します。
Dim ary As Variant
(省略)
ary = array("0","1","2","3")
要素数を変更する場合にはRedimを使用して再定義します。
このときPreserveキーワードを指定すると内容を保持したまま
要素数を変更します。
ただし、Preserveキーワードは一番最後の次元の要素数以外の変更はできません。
以下のサンプルでは配列の要素数を変更し、その内容を表示させるものです。
Sub sample()
Dim Ary As Variant
Dim Ix As Integer
Dim SavedIx As Integer
Dim Msg As String
Dim LastWord As String
Ary = Array("A", "B", "C", "D", "E")
SavedIx = UBound(Ary)
LastWord = "次に内容を保存したまま" _
& vbNewLine & "要素数2で再定義します." _
& vbNewLine & vbNewLine & "ReDim Preserve Ary(2)"
GoSub display
ReDim Preserve Ary(2)
LastWord = "次は要素数を戻します." _
& vbNewLine & vbNewLine & "ReDim Preserve Ary(SavedIx)"
GoSub display
ReDim Preserve Ary(SavedIx)
LastWord = "一度失われた内容は復元しません." _
& vbNewLine & "配列を戻します."
GoSub display
Ary = Array("A", "B", "C", "D", "E")
LastWord = "次にPreserveを使用しないで" _
& vbNewLine & "要素数2で再定義します." _
& vbNewLine & vbNewLine & "ReDim Ary(2)"
GoSub display
ReDim Ary(2)
LastWord = "内容は全て失われます." _
& vbNewLine & "配列を戻します."
GoSub display
Ary = Array("A", "B", "C", "D", "E")
LastWord = "現在の配列数で再定義すると" _
& vbNewLine & "内容のクリアができます." _
& vbNewLine & vbNewLine & "ReDim Ary(UBound(Ary))"
GoSub display
ReDim Ary(UBound(Ary))
LastWord = "以上で、おしまいです."
GoSub display
Exit Sub
display:
Msg = "配列の内容" & vbNewLine
For Ix = 0 To UBound(Ary)
Msg = Msg & " ary(" & Ix & ") = " & Ary(Ix) & vbNewLine
Next
MsgBox Msg & vbNewLine & vbNewLine & LastWord
Return
End Sub