VBAのEraseで配列のデータをクリアする方法をわかりやすく解説

スポンサーリンク
スポンサーリンク

Eraseの概要

配列のデータをクリアし、メモリを解放する VBAの予約語

Erase

概要 Erase ステートメントは、VBAで配列のデータをクリアするために使用されます。静的配列と動的配列では動作が異なり、静的配列はすべての要素を初期値にリセットし、動的配列はメモリを解放して配列を空にします。

わかりやすく説明 配列の中身をリセットし、必要に応じてメモリを解放する命令。

  • 静的配列はデータを初期化するが、サイズは変わらない。
  • 動的配列はメモリを解放し、完全に空になる。
  • Excel VBAのデータ処理や配列のリセット時に役立つ。

Eraseを使った静的配列のクリア

以下の例では、Erase を使って静的配列のデータをリセットします。

Sub TestEraseStaticArray()
    Dim arr(1 To 5) As Integer
    Dim i As Integer
    
    ' 配列にデータを設定
    For i = 1 To 5
        arr(i) = i * 10
    Next i

    ' Eraseでリセット
    Erase arr

    ' 結果を表示
    MsgBox "arr(1) の値: " & arr(1) ' 0 になる
End Sub

解説:

  • Erase arr により、配列の要素が初期値にリセットされる。
  • Integer 型の配列なので、すべての要素が 0 になる。
  • 配列のサイズ(1~5)は変わらない。

Eraseを使った動的配列のクリア

以下の例では、Erase を使って動的配列を解放します。

Sub TestEraseDynamicArray()
    Dim arr() As Integer
    Dim i As Integer
    
    ' 動的配列を再定義
    ReDim arr(1 To 5)
    
    ' 配列にデータを設定
    For i = 1 To 5
        arr(i) = i * 10
    Next i

    ' Eraseでメモリ解放
    Erase arr

    ' 配列が空になったため、再利用時は再度 ReDim が必要
    ReDim arr(1 To 3)
    MsgBox "配列のサイズを変更しました(1~3)"
End Sub

解説:

  • 動的配列は Erase arr で完全に解放される。
  • 配列を再利用する場合は ReDim で再定義が必要。

Excel VBAでのEraseの活用

Excelのセルデータを配列に格納し、処理後に配列をクリアする例です。

Sub LoadAndClearArray()
    Dim arr() As Variant
    Dim lastRow As Integer
    
    ' 最終行を取得
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    ' 配列にセル範囲を格納
    arr = Range("A1:A" & lastRow).Value

    ' 処理を実行
    MsgBox "データを配列に格納しました。"

    ' 配列をクリア
    Erase arr

    MsgBox "配列をクリアしました。"
End Sub

解説:

  • ExcelのA列のデータを配列に格納。
  • 処理が終わったら Erase で配列をクリア。

Eraseの注意事項

  • 静的配列ではデータのみがリセットされ、サイズは変わらない
  • 動的配列は完全に解放され、再利用には ReDim が必要
  • オブジェクト配列の場合、Erase は使用できない(Set を使って解放する)。

よくある質問

Q: Erase の後に配列のサイズを取得できますか?
A: 動的配列は解放されるため、サイズを取得するとエラーになります。
Q: Erase はオブジェクトの配列にも使えますか?
A: いいえ。オブジェクトの配列は Set を使って個別に解放する必要があります。
Q: 配列を再利用するにはどうすればいいですか?
A: 動的配列の場合は ReDim を使って再定義してください。

まとめ

  • Erase は配列のデータをクリアするためのステートメント。
  • 静的配列は要素が初期化されるが、サイズは変わらない。
  • 動的配列はメモリが解放され、再利用には ReDim が必要。
  • Excel VBAでデータを一時的に格納する場合などに活用できる。