当方のオンラインマクロ受講者に聞かれて、少し調べた案件です。
マクロを主に仕事としていても、普段使わないものはわかっていないものがあり、日々勉強だと感じました。
—-
Redim Preservで。実行時エラー9 インデックスが有効範囲にありません。が表示されます。
どのように回避したらいいでしょうか?
—-
一度Dim宣言すると配列の添え字の始まりは変更できない
下記のarr1とarr2()は同じように見えます。
実際にはVariant型なのか、Variant型の配列として定義されているかの違いはあります。
Public Sub test() Dim arr1 As Variant 'Variant型として定義 Dim arr2() As Variant 'Variant型の配列として定義 ReDim arr1(0): arr1(0) = "a" ReDim arr2(0): arr2(0) = "a" ReDim Preserve arr1(1 To 2) 'エラーは発生しない arr1(1)="a" arr1(2)="" ReDim Preserve arr2(1 To 2) '実行時エラー9 インデックスが有効範囲にありません。 End Sub
まとめ
- arr1→Variant 型変数を 配列として使う場合、ReDim Preserve でインデックス範囲の変更可能。
※Variant型変数として割当→Redimのタイミングで動的配列として定義。 - arr2()→配列として宣言しているため、ReDim Preserve ではインデックスの変更不可能。
- 私は配列自体、arr1と同じようにVariant型変数として宣言。
セルを取り込んだり自由に動かすことがほとんどです。
コメント