Excel VBA の実行時エラー辞典
実行時エラー '7':メモリが不足しています
読み込むセルや配列を絞り、開いたブックや大きなデータを抱え続けていないか確認します。
よくある原因
- シート全体を一度に Variant 配列へ読み込んでいます。
- 多数のブックやフォームを開いたまま、次の集計を始めています。
- ループごとに大きな文字列や配列を追加し続けています。
直し方
- どのデータ量から失敗するか、小さいコピーで確認します。
- 必要な列と行だけを読み込み、さらに大きい場合は分割して処理します。
- 処理が終わった配列は 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
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 読み込む範囲の行数・列数と、開いているブック数を確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? lastRow, Application.Workbooks.Count
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。