
集計マクロを動かしたら、途中で「メモリが不足しています。」と表示されて止まってしまった。
パソコンのメモリは足りているはずなのに、なぜ?と困っていませんか。
結論から言うと、VBAのメモリ不足は「一度に扱うデータ量を減らす」ことで、ほとんどが回避できます。
処理を数百〜千行ずつに分け、使い終わった配列やオブジェクトを解放するのが基本です。
マクロを使っていなくても出る場合は、32bit版Excelの上限や、ブックの書式の増えすぎが原因です。
本記事では、Excel/VBA専門のシステム開発会社であるセルネッツが、エラーの種類の見分け方から原因、対処法までを解説します。
開発の現場で使っている「1シートのデータ量の目安」もご紹介します。
データが増えて動かなくなったマクロ、Excel専門の開発会社が見直します
- 大量データの集計マクロが、途中で「メモリが不足しています。」と止まる
- 前任者が作ったマクロで、どこが原因なのか社内でわからない
- ブックが重くなり、開くだけ・保存するだけで時間がかかる
そのお悩み、処理の分割やデータの持ち方を見直すマクロ改修で解決できます。Excel専門のシステム開発会社『セルネッツ』なら、いま使っているブックを土台に、データが増えても止まらない作りに組み直します。他社や前任者が作ったマクロの調査・修正もご相談いただけます。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料
「メモリが不足しています」は2種類ある(VBAのエラー7とExcel本体のメモリ不足)
同じ「メモリ不足」でも、マクロ実行中に出るものとExcelの操作中に出るものでは、原因と対処が異なります。

| 比較項目 | VBAのエラー7 | Excel本体のメモリ不足 |
| 表示されるメッセージ | 実行時エラー ‘7’: メモリが不足しています。 | この操作を完了するにはメモリが不足しています など |
| 出るタイミング | マクロの実行中 | ブックを開く・保存・計算・印刷・列の挿入など |
| 主な原因 | 無駄なループ、大量データの一括処理、大きすぎる配列やプロシージャ | 32bit版Excelの上限、書式・スタイル・図形の増えすぎ、重い数式 |
| 主な対処 | 処理を分割する、配列やオブジェクトを解放する | ブックを軽くする、64bit版Excelを検討する |
マクロを動かしたときだけ出るならVBA側、手作業の操作でも出るならExcel本体側を疑ってください。
Excel本体側の対処法は、後半の「Excel本体の「メモリ不足」を解消する手順」で解説します。
VBAのエラー7が出る主な原因は4つ
読んで字のごとく、「メモリ不足」が原因の実行時エラーです。ExcelVBA処理において、このエラーが発生する原因は、いろいろと考えられますが、現場でよく見るのは次の4つです。
原因1:無駄なループや、解放していないオブジェクト
よくあるのが、不要なLoop繰り返し処理により、メモリ不足となってしまうケースです。
このケースでは、適切なLoopとなるよう特定条件でこのLoopを脱出すれば良いので、無駄なLoopが突き止められれば、わりと簡単に解消できると思います。
ループの中でブックやオブジェクトを作り続け、閉じたり解放したりしていない場合も、メモリを消費し続けます。
どの行で止まるかの調べ方は、実行時エラーの原因を突き止めるデバッグのコツを参考にしてください。
原因2:列数・行数が多すぎるデータを一度に処理している
また、別のケースでは、物理的、且つ、圧倒的にデータ量が多いケースです。
このデータ量とは、「データ件数」のみで語れるものではありません。
というのは「データ件数」という概念は、行方向、つまり縦方向に、どれだけデータ数が多いか、といったものですが、忘れてならないのは「横方向の列数」という概念です。
一般的に、顧客管理などでは、例えば、顧客マスタは、顧客の基本情報を抱えるものですので、
顧客CD、顧客名、フリガナ、生年月日、郵便番号、住所1、住所2…・。
のように、延々と増えた場合においても、数十列、100列はないのではないでしょうか。
つまり、数百列におよぶ顧客マスタは、まず考えにくいので、データの件数が多い、少ない、といった会話になってくるのですが、これが、月別の売上/実績/修正値/2カ年などを管理するような表の場合、
最近のお客様の例では、600列が1行のデータというケースがありました。

Excelを手作業で長いこと業務で運用されていると、いつの間にか膨大なデータ量を1ブックで管理するようになることが有りますが、数年をかけて徐々に増えてゆくため、なかなか気づきにくく、変更見直しや改良をしにくいのだと思います。
原因3:配列やPublic変数が大きすぎる
セル範囲を配列に読み込むと処理は速くなりますが、範囲が大きすぎるとメモリを一気に使います。
600列×数万行を丸ごと配列に入れる、といった書き方は要注意です。
Microsoftの公式リファレンスでも、Public変数の領域不足がエラー7の原因の1つに挙げられています。
原因4:モジュールやプロシージャが大きすぎる
1つのモジュールやプロシージャが大きすぎると、64KBのセグメント境界に達してエラー7になることがあります。
機能ごとに複数のプロシージャやモジュールに分けると回避できます。
(参考:Microsoft Learn「メモリが不足しています (エラー 7)」)
VBAのエラー7を回避する3つの対処法
いちばん確実なのは、一度に扱うデータ量を減らすことです。
対処法1:処理を500〜1000行単位に分割する
列数が数百列におよぶデータ範囲をマクロで処理するなら、処理単位をいくつかに分割し、「メモリ不足」が発生しないようプログラム修正を行うことで、回避するのが確実です。データベースを使えば回避できるか?と言われれば、データベース構築においても、そんなDB設計を行うSEは恐らくいませんので、そもそもファイル設計から見直しとなります。
あまりに大量なデータ範囲を、一度に配列へ格納するのはおすすめしません。例えば、1000行や500行づつ小分け処理をすれば、この実行時エラーは多くの場合で回避できます。
対処法2:使い終わった配列やオブジェクトを解放する
大きな動的配列は、使い終わったら Erase で中身を消しておきます。
ブックやオブジェクトは、閉じたうえで Set 変数 = Nothing として参照を外します。
ループの中で開いたブックを閉じ忘れていないかも、あわせて確認してください。
対処法3:セル操作を減らし、画面更新と自動計算を止める
ExcelVBAでは、セルを1つずつ読み書きする操作や、シートの切り替えを大量に繰り返すと、エラーの原因になりやすくなります。
処理中は Application.ScreenUpdating = False と、計算方法を手動にする設定を入れ、終わったら元に戻します。
負荷が下がり、処理時間の短縮にもつながります。
Excel本体の「メモリ不足」を解消する手順
マクロを使っていなくても出る場合は、Excelのバージョンとブックの中身を順に確認します。
手順1:Excelが32bit版か64bit版かを確認する
[ファイル]→[アカウント]→[Excelのバージョン情報]で、32ビットか64ビットかを確認できます。
32bit版のExcelが使えるメモリは、64bit版Windowsでも最大4GBまでです。
パソコンに16GBのメモリを積んでいても、Excelはその一部しか使えません。
(参考:Microsoft Learn「Excel の「Large Address Aware」機能の変更」)
大量のデータを日常的に扱うなら、64bit版への切り替えが有力です。
ただし古いマクロは、64bit版でそのまま動かないことがあります。
詳しくは64bit版Excelで起きるコンパイルエラーの原因と対処をご覧ください。
手順2:ブックの不要な書式・スタイル・図形を削除する
Microsoftは、メモリ不足の解消法として次の順での見直しを案内しています。
- 列全体・行全体にかけた色や罫線など、余分な書式を消す
- 他のブックからのコピーで増えた、使っていないセルのスタイルを消す
- 見えない図形やコメントを、[選択ウィンドウ]で探して消す
- 壊れたり重複したりした条件付き書式を、いったんクリアする
スタイルが数千〜数万件に増えたブックは、手作業では消しきれません。
マクロで一括削除する方法は大量のスタイルを一括削除する方法で紹介しています。
手順3:重い数式と外部リンクを見直す
VLOOKUPなどで列全体を参照する数式は、必要な範囲だけを参照するように直します。
TODAYやNOWなど、再計算のたびに動く関数を何百ものセルで使うのも避けましょう。
他のブックを参照する数式や、不要な名前の定義も整理します。
(参考:Microsoft Learn「使用するメモリを減らすために Excel ブックをクリーンアップする」)
1シートのデータ量の目安は「100列以下・3万行未満」
シートの上限まで使えるとは考えず、目安を超えたらブックを分けるのがおすすめです。
Excel2007以降では、ワークシート内の取り扱い可能なデータ件数が、(2の20乗)1,048,576件と拡張されましたが、理論上の上限ですので、現実的には列数が少ない100列以下で、3万行未満というのが、弊社の考える、Excelの1シートの「そろそろ別ブックに・・」をオススメする件数の目安でしょうか。
先ほどの600列のような表は、この目安を大きく超えています。
年度ごと・部署ごとにブックを分けるだけでも、メモリ不足はかなり起きにくくなります。
注意点:その場しのぎの対処で済ませない
エラーが一度消えても、データは毎年増え続けるため、同じエラーが再発しがちです。
ただし、ファイル設計から見直すとなれば、別の問題として、「発生コスト」が直結してくる事になります。
どんなトラブルも回避するための策はあるのですが、かけられる予算も限られてくる場合には、知恵を出して、致命的エラーを乗り切らなければなりません。
厳しい現実の中でも、VBAで処理できるよう対応するのが腕の見せ所ですので、
頑張って参りたいと思います。

業務が止まっていて急ぎで直したい場合は、Excelエラー解決サービスもご検討ください。
本サービスは、緊急性が高く、問題解決を必要とするケースでご利用メリットがあります。
メモリ不足に関するよくある質問
64bit版Excelにすれば、必ず直りますか?
必ず直るとは限りません。
使えるメモリの上限は大きく上がりますが、無駄なループや大きすぎる配列が原因なら再発します。
古いマクロは、64bit版に合わせた修正が必要になる場合もあります。
Windowsの仮想メモリを増やせば直りますか?
パソコン全体のメモリが足りない場合は、改善することがあります。
ただし、32bit版Excelが使えるメモリの上限は変わりません。
根本的には、扱うデータ量を減らすか、64bit版を検討してください。
マクロの途中で上書き保存すると直りますか?
一時的にエラーが出なくなることはありますが、確実な方法ではありません。
DoEventsも、Windowsに処理を譲る命令で、メモリを解放するものではありません。
処理の分割や、配列・オブジェクトの解放を優先してください。
まとめ|メモリ不足は「一度に扱うデータ量」を減らして解決しよう
VBAのエラー7は、処理を500〜1000行単位に分け、配列やオブジェクトを解放すれば多くの場合は回避できます。
Excel本体のメモリ不足は、32bit版か64bit版かを確認し、不要な書式やスタイルを整理しましょう。
1シート100列以下・3万行未満を目安に、データが増えたらブックを分けるのが再発防止の近道です。
メモリ不足以外のExcelトラブルもまとめて確認したい方は、Excelの不具合10選と回避術もあわせてご覧ください。
直すか、作り直すか。迷ったらご相談ください
- メモリ不足を、その場しのぎではなく根本から解決したい
- データが増えても止まらない集計の仕組みに作り直したい
- 作り直すといくらかかるのか、先に目安を知りたい
セルネッツの参考価格は、集計レポートなら12万円〜、入力フォームを備えた簡易システムなら30万円〜、データベースを使った排他制御などは45万円〜です(いずれも税別)。いまのマクロを改修すべきか、ブックの設計から見直すべきかも、正直にお伝えします。
\Excel専門特化 × 低価格 × スピード対応/
全国対応・お見積もり無料