配列(一次元/二次元)

一度Dim宣言すると配列の添え字の始まりは変更できない(けどVariant型は関係ない)【ExcelVBA】

当方のオンラインマクロ受講者に聞かれて、少し調べた案件です。
マクロを主に仕事としていても、普段使わないものはわかっていないものがあり、日々勉強だと感じました。

—-

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型変数として宣言。
    セルを取り込んだり自由に動かすことがほとんどです。

関連記事

コメント

タイトルとURLをコピーしました