【ExcelVBA】メモリーの解放方法・タイミングについて徹底解説!

皆さんは、VBAでメモリの解放をしたことがありますか?変数に入れた値をメモリ解放せずにいると、処理が重たくなったり、メモリリークで処理が動かなくなることもあります。そこで今回は、

メモリとは?
VBAでメモリを解放する方法を知りたい

といった基礎的なことから

  • VBAでメモリを解放するサンプルコード
  • 【よくある議論】VBAでメモリの解放は必要か?

といった応用的な方法まで、徹底的に解説します!

目次

メモリとは?

はじめに、メモリについて簡単に解説します。メモリとは、PC上でデータを一時的に記憶しておく場所です。データのコピー、削除などの具体的な操作だけでなく、変数を使う場合にもメモリを使います。

特に、変数を使う場合は「メモリの解放」をしないと、処理が終わるまで無駄なメモリを使い続ける状態になるため、処理が遅くなったりメモリリークと呼ばれる強制的に処理が止まるエラーを引き起こす原因となってしまいます。

そのため、メモリの解放を意識してVBAのコードを書いていかなければなりません。

VBAで変数のメモリを解放する方法とは?

次に、変数のVBAでメモリの解放をする方法を解説します。次のように書くことで、簡単にメモリを解放することができます。

メモリ解放方法:

変数名 = nothing     'オブジェクト以外の場合
set 変数名 = nothing 'オブジェクトの場合

このように書くことで、変数を使うために確保したメモリの領域を解放することができます。

VBAでメモリを解放するサンプルコード

次に、サンプルコードをもとに、具体的な使い方について解説します。
サンプルコード:

Sub Test()
    '変数宣言
    Dim rng1 As Range
    Dim rng2 As Range
    
    '変数に値をセット
    Set rng1 = Range("A1")
    Set rng2 = Range("A2")
    
    '値1をセット & 解放
    rng1.Value = "変更1"
    Set rng1 = Nothing
    
    '値2をセット & 解放
    rng2.Value = "変更2"
    Set rng2 = Nothing
    
End Sub

rng1.Value = “変更1″のように値を変更した後、Set rng1 = Nothingでメモリを解放しています。このように、使い終わった変数はメモリの解放をするのが重要です。

【よくある議論】VBAでメモリの解放は必要か?

ここまでメモリの解放について解説していきましたが、必ずメモリの解放が必要か?といったらそうではありません。理由は、サブシージャの処理が終わる「End Sub」まで到達すると、自動でメモリが解放されるからです。

先ほどのサンプルでいうと、次のように最後にメモリ解放をしている場合は、書く意味があまりありません。

最後にメモリ解放したサンプル:

Sub Test2()
    '変数宣言
    Dim rng1 As Range
    Dim rng2 As Range
    
    '変数に値をセット
    Set rng1 = Range("A1")
    Set rng2 = Range("A2")
    
    '値をセット
    rng1.Value = "変更1"
    rng2.Value = "変更2"
    
    'メモリを解放
    Set rng1 = Nothing
    Set rng2 = Nothing
End Sub

Nothingでメモリを解放したあとに、End Subがあるのでコードを書くこと自体が無駄なわけですね。そのため、変数を使い終わったタイミングで、メモリ解放するコードを書くという意識が大事です。

まとめ

今回は、メモリの解放方法・タイミングについて解説しました。初めてメモリの解放を学んだ方は、使い方に慣れるまで時間がかかるかもしれません。しっかりと使い方を覚えてメモリを解放していくことで、バグの少ないコードを作ることができます。

ぜひ、使ってみてくださいね!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次