VBAで配列を使うにはDimで宣言する必要がありますが、ReDimを使うと配列のサイズを変えることができます。
基本的な使い方をメモしておきます。
Sub test1()
Dim a(10)
ReDim a(20) '「配列は既に宣言されています。」
End
Dim a(10)
ReDim a(20) '「配列は既に宣言されています。」
End
ReDimは配列のサイズを変える際に使うのですが、Dimで宣言した場合は、エラーになります。
Sub test2()
ReDim a(10) '最初からReDimを使う。
ReDim a(20) 'エラーにならない。
End
ReDim a(10) '最初からReDimを使う。
ReDim a(20) 'エラーにならない。
End
最初からReDimで宣言すると再度、宣言することができます。
Sub test3()
ReDim a(10)
a(0) = 100 '値を代入。
ReDim a(20)
MsgBox a(0) 'Empty値になる。
End
ReDim a(10)
a(0) = 100 '値を代入。
ReDim a(20)
MsgBox a(0) 'Empty値になる。
End
ただし代入されていた値は空になってしまいます。
Sub test4()
ReDim a(10)
a(0) = 100 '値を代入。
ReDim Preserve a(20) 'Preserveを使う。
MsgBox a(0) '値が表示される。Empty値にならない。
End
ReDim a(10)
a(0) = 100 '値を代入。
ReDim Preserve a(20) 'Preserveを使う。
MsgBox a(0) '値が表示される。Empty値にならない。
End
「Preserve」を使うと代入されていた値が空になりません。
Sub test5()
ReDim a(10)
a(0) = 100
a(1) = 200
a(2) = 300
ReDim Preserve a(2) '添え字の最大値を減らす。
MsgBox a(2) '要素はそのまま。
MsgBox UBound(a) '添え字の最大値だけ小さくなる。
End
ReDim a(10)
a(0) = 100
a(1) = 200
a(2) = 300
ReDim Preserve a(2) '添え字の最大値を減らす。
MsgBox a(2) '要素はそのまま。
MsgBox UBound(a) '添え字の最大値だけ小さくなる。
End
サイズが分からない配列を作るときはサイズを大きめに宣言するので使わない部分が無駄になります。
上述の性質を利用すると無駄を省くことができます。
まずReDimで大きめに宣言します。配列を使って処理します。配列のサイズが分かったところで、改めてReDimでサイズを宣言します。Preserveを使えば要素はそのままです。
配列の無駄な部分を省けます。
コメント