- 「大量のデータを処理するために配列を使ってみたけど、これって使い終わったらそのままでいいのかな?」
- 「ループの中で配列を使い回すと、前のデータが残ってて計算が狂っちゃう…」
こんなふうに悩んだことはありませんか?
配列は非常に便利ですが、使用後の「片付け」を怠ると、メモリという限られたリソースを不必要に占有し続けてしまいます。
今日は、そんな事態を防ぐ「Erase(イレーズ)ステートメント」について、解説します。
Eraseステートメントの役割:作業机のリセット
プログラミング用語で「配列の初期化」や「メモリの解放」と言うと難しく聞こえますが、身近な例えで言うと「作業が終わった机の上を片付けること」です。
VBAの配列には、大きく分けて2種類あります。この2つで、Eraseを使った時の「片付けられ方」が少し違います。
- 静的配列(固定サイズ):大きさが決まっている机。Eraseすると「中身だけ」消えて、机はそのまま。
- 動的配列(可変サイズ):大きさを変えられる机。Eraseすると「机そのもの」が一旦なくなって、スペースが空く。
この2つの違いを理解しておくと、バグのないスムーズなコードが書けるようになります。
コピペでOK!Eraseの使い方サンプルコード
では、実際にどう書くのか見てみましょう。以下のコードは、そのままVBAエディタに貼り付けて動作を確認できます。
Sub ArrayEraseSample()
' --- 1. 静的配列(固定サイズ)の場合 ---
Dim staticArray(2) As Integer
staticArray(0) = 100
staticArray(1) = 200
' Eraseを実行
Erase staticArray
' 配列自体は残っているので、エラーにならず「0」が表示されます
Debug.Print "静的配列の初期化後:" & staticArray(0)
' --- 2. 動的配列(サイズ変更可能)の場合 ---
Dim dynamicArray() As String
ReDim dynamicArray(2) ' ここでサイズを決定
dynamicArray(0) = "こんにちは"
' Eraseを実行
Erase dynamicArray
' ※このまま dynamicArray(0) を参照しようとするとエラー(インデックスが有効範囲にない)になります
Debug.Print "動的配列を解放しました"
ReDim dynamicArray(5) ' 再び使えるように再定義
dynamicArray(0) = "再利用開始!"
Debug.Print dynamicArray(0)
End Sub
なぜEraseを使うべきなの?2つの大きなメリット
「わざわざ書かなくても、マクロが終われば自動的に消えるのでは?」と思うかもしれません。
たしかに簡易的な処理であれば問題になりにくいですが、実務レベルのツール開発においては、以下の理由からEraseの活用が不可欠となります。
1. 前のデータが混ざるのを防ぐ(正確性100%へ)
ループ処理(繰り返し)の中で配列を使う場合、Eraseをしないと、前の回のデータが残ったまま次の計算が始まってしまうことがあります。これは「原因の特定が難しい計算ミス」を招く、一番厄介なバグが生まれます。
2. PCの動作を軽くする(メモリの節約)
動的配列に巨大なデータを入れたまま放置すると、PCの「メモリ」を消費し続けます。特にスペックの低い事務用PCだと、Excel全体の動作が重くなる原因にもなりかねません。Eraseでメモリを解放することで、処理速度の低下を防げます。
まとめ:
VBAの配列を使えるようになったら、次は「美しく片付ける」ことを意識してみてください。
- 静的配列は「中身のリセット」
- 動的配列は「メモリの解放」
この使い分けをマスターすれば、PCに優しく、保守性の高いコードを書けるようになります。スマートなコードは、私たちに快適な開発環境と確実な成果をもたらしてくれます。
ぜひ試してみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント