VBA のメモリ不足

Iqra Hasnain 2023年6月21日
VBA のメモリ不足

この記事では、いくつかの例を使用して、VBA の メモリ不足 エラーについて説明します。

VBA のメモリ不足エラー

Excel がマクロの実行中にデバイスのすべてのリソースを使用すると、VBA は メモリ不足 エラーを返します。 コードを計算して実行するには、メモリが不足します。

多くのプログラムがデバイスで実行されているときに発生し、Excel で広範なマクロを実行しようとしているか、または Excel でエラーが発生したときに永久ループを作成することができます。

非常に多くのワークシートと行を含むワークブックで作業していると、VBA で メモリ不足 エラーが発生します。 大量のデータを処理するループを作成すると、メモリ不足 エラーが発生します。

多くのオブジェクトを操作し、SET ステートメントですべてを設定するが、ループまたはプロシージャ間のオブジェクトへの参照をクリアしない場合。 例の助けを借りて議論しましょう。

以下のループ内のコードは、複数のシートで複数のファイルを開くと、メモリ不足 エラーを引き起こす可能性があります。

Sub TestMemory()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim i As Single
  For Each wb In Application.Workbooks
    For Each ws In wb.Sheets
      Do Until ActiveCell = "A1048576"
        ActiveCell = 1 + i
        i = i + 1
        ActiveCell.Offset(1, 0).Select
    Loop
  Next ws
Next wb
End Sub

VBA でオブジェクトを解放する

ループとオブジェクトを操作するときは、オブジェクトを一度使用したら NOTHING に設定する必要があります。 メモリが不要になった場合は、メモリを解放します。

set str = ""
set num = []

Excel のインスタンスが 1つだけ実行されていることを確認します。 巨大なファイルと大量のデータを扱う場合、Excel で開いているセッションが多くないことを確認する必要があります。

必要な場合は、一度開いてください。 これを確認するには、タスク マネージャーに移動して、その時点で実行されている Excel のインスタンス数を確認する必要があります。

キーボードで Ctrl+Alt+Delete を押し、タスク マネージャーをクリックして、Excel のインスタンスが 1つだけ実行されていることを確認します。

VBA でオブジェクトを解放する (1)

同様に、バックグラウンドで実行されている Excel の例がないことをタスク マネージャーで確認できます。 [バックグラウンド プロセス] が表示されるまでタスク マネージャーを下に見て、Excel がプロジェクトの対象外であることを確認します。

VBA でオブジェクトを解放する (2)

Excel レコードのサイズを確認します。 使用頻度の高い線と線分は、ワークシートで使用されている線分の下に配置されています。

成功には、セルが空いているかどうかに関係なく、これらのセルに記憶が含まれます。 コンソールで CTRL+SHIFT+END を押してドキュメントのサイズを確認し、セル ポインターがどこにあるかを確認します。

使用している最後のセルの下に適切に配置されていると仮定すると、セル ポインター上の塗りつぶされていない行とセクションをすべて消去し、その後レコードを再保存します。 これにより、Excel ドキュメントのサイズが小さくなります。

VBA でメモリをチェックする別の方法

Excel でメモリを解放するには、別の方法があります。 すばらしいアイデアは、Excel を使用していない場合に備えて閉じ、後で開くことです。

Excel が保存されているメモリを解放し、ブックが開かれていない場合でもメモリを保持する傾向があります。

デバイスの更新プログラムをチェックし、まだ使用していない VBA アドインをチェックして、Office のバージョンが最新であることを継続的に確認します。 これらをアンインストールして、より多くのメモリを解放できます。