\ 最大9.5%ポイントアップ! /

【VBA配列の初期化ガイド】固定長・動的配列の違いと使い方を徹底解説!

  • 「固定長配列と動的配列って何が違うの?」
  • 「ReDimって何度も使っていいの?」
  • 「配列の中身を初期化するにはどうすればいいの?」

配列の初期化をしっかり理解すれば、VBAでのデータ管理がグッと快適になります!

この記事では、固定長・動的配列それぞれの初期化方法や、ReDim/Eraseの正しい使い方を初心者向けにわかりやすく解説します。

固定長配列の初期化方法

固定長配列は、宣言時に要素数を指定するタイプの配列です。

要素数を変更できない分、処理がシンプルで高速です。

宣言と同時に初期化される例

Sub InitFixedArray()
    Dim nums(0 To 4) As Integer ' 5つの要素を持つ配列
    Dim i As Long

    For i = 0 To 4
        nums(i) = 0 ' 明示的に0で初期化(実際は省略可)
    Next i
End Sub

固定長配列は宣言時点で自動的に初期値(数値型は0、文字列型は””)がセットされます。

明示的に初期値を入れる場合は上記のようにループで処理します。Eraseを使ってもメモリは解放されず、値がリセットされるだけなので注意しましょう。

動的配列の初期化と拡張

動的配列は、実行時にサイズを決定できる柔軟性の高い配列です。ユーザーの入力やデータ量に応じてサイズを調整できます。

ReDimでサイズを決めて初期化

Sub InitDynamicArray()
    Dim data() As String
    ReDim data(5) ' 要素数6の配列(0〜5)を初期化

    data(0) = "Apple"
    data(1) = "Banana"
End Sub

ReDimを使うと、その時点でメモリが確保され、初期値がセットされます。

ただし、このとき既存の配列の中身は消える点に注意しましょう。

ReDim Preserveで再定義&保持

ReDim Preserveを使うと、既存の配列内容を保持したまま配列サイズを再定義できます。ただし、変更できるのは最終次元だけです。

配列サイズを変更しつつデータを保持する例

Sub ExtendArray()
    Dim nums() As Integer
    ReDim nums(2)

    nums(0) = 10
    nums(1) = 20
    nums(2) = 30

    ReDim Preserve nums(4) ' 要素数を5に拡張(0〜4)
    nums(3) = 40
    nums(4) = 50
End Sub

このように、ReDim Preserveを使えば、すでに格納されているデータを消さずに要素を追加できます。

データの追加・拡張処理に便利なテクニックです。

Eraseステートメントで配列をリセット

Eraseステートメントは、配列の初期状態に戻すための命令です。固定長と動的配列で動作が異なるので要注意。

配列の内容をリセット・解放する方法

Sub ResetArray()
    Dim words() As String
    ReDim words(3)
    words(0) = "A"
    Erase words ' メモリも解放される(Length = 0)

    MsgBox "要素数: " & UBound(words) ' エラーになります!
End Sub

動的配列に対してEraseを使うと、配列自体が解放されてアクセス不能になります

再度使いたい場合は、ReDimで再定義が必要です。一方、固定長配列ではEraseを使ってもメモリは保持されたまま、初期値に戻るだけです。

まとめ:初期化を理解すれば配列の扱いが楽になる!

VBAで配列を使いこなすためには、初期化と再定義のルールをしっかり押さえることが大事!

今回のポイントまとめ

  • ✅ 固定長配列は宣言時にサイズが決まり、初期値が自動で入る!
  • ✅ 動的配列はReDimでサイズ指定!Preserveで中身を保持可能!
  • ✅ Eraseで初期化・解放!動的配列は注意が必要!

「なんとなくReDimしてたけど、やっと理解できた!」という状態を目指して、ぜひ配列マスターを目指しましょう😊

この記事が気に入ったら
フォローしてね!

シェア・記事の保存はこちら!

この記事を書いた人

CFXLOGのアバター CFXLOG プログラマ

メイン言語はPython。本ブログでは、実務や普段の学習で学んだことをアウトプットしています。
基本情報技術者試験合格者。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)