Excel VBA の実行時エラー辞典

実行時エラー '7':メモリが不足しています

読み込むセルや配列を絞り、開いたブックや大きなデータを抱え続けていないか確認します。

よくある原因

直し方

  1. どのデータ量から失敗するか、小さいコピーで確認します。
  2. 必要な列と行だけを読み込み、さらに大きい場合は分割して処理します。
  3. 処理が終わった配列は Erase、不要な参照は Nothing にし、開いたブックを適切に閉じます。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。

A 列で最終行を判断でき、必要な列が A〜C 列の表を想定しています。これは負荷を減らす例で、全環境での解消を保証するものではありません。

修正前

Dim data As Variant
data = ThisWorkbook.Worksheets(1).Cells.Value2

修正後

Dim data As Variant, lastRow As Long
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(1)
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
data = ws.Range("A1:C" & lastRow).Value2
' ここで必要な集計を行います
Erase data

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. 読み込む範囲の行数・列数と、開いているブック数を確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? lastRow, Application.Workbooks.Count

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料