「データはほとんど入っていないのに、なぜかExcelファイルが50MBもある…」「昨日まで軽かったファイルが、今日開いたら数分かかる…」そんな経験、ありませんか?実はこの現象、あなただけではありません。世界中のExcelユーザーが頭を抱えている”あるある”なんです。
しかも厄介なことに、データを消しても、シートを減らしても、ファイルサイズがまったく小さくならないケースがほとんど。なぜなら、Excelの内部には目に見えない”ゴミデータ”が山のように蓄積されているからです。この記事では、Excelでファイルサイズだけ異常に増える本当の原因を徹底的に解剖し、誰でも今日から実践できる具体的な軽量化テクニックをお伝えします。50MBのファイルを2MBまで縮小した実例も交えながら、初心者にもわかりやすく解説していきますね。
- Excelでファイルサイズだけ異常に増える7つの根本原因と、それぞれの見つけ方
- 50MBを2MBに縮小した実証済みの軽量化テクニック
- 2026年最新の「パフォーマンスチェック」機能を活用したワンクリック最適化術
- なぜデータを消してもExcelのファイルサイズは減らないのか?
- Excelでファイルサイズだけ異常に増える7つの本当の原因
- Excelファイルの肥大化を一発で診断する方法
- 今すぐ実践できるExcelファイル軽量化7つのテクニック
- プロが教える「太らせない」予防策
- 2026年のExcel最新機能で肥大化に立ち向かう
- 情シス歴10年超の現場で遭遇した「誰も教えてくれない」肥大化トラブル実録
- 現場で本当に使えるVBAマクロ集(動作検証済み)
- 現場でよく遭遇するけど解決法がわからない問題への処方箋
- 上級者向けXMLレベルでの外科的なファイル修復
- 「そもそもExcelでやるべきなのか?」という根本的な問い
- ぶっちゃけこうした方がいい!
- Excelでファイルサイズだけ異常に増えることに関するよくある疑問
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ
なぜデータを消してもExcelのファイルサイズは減らないのか?
まず最初に知っておいてほしい、とても大事な事実があります。Excelは一度でも触れたセルのすべてを記憶しているということ。セルに何かを入力して、あとからDeleteキーで消したとしても、Excelの内部ではそのセルの「書式情報」「色」「罫線」「フォント設定」などがしっかり残り続けます。
たとえば、A1からB10までしかデータがないのに、過去に誰かがA100000セルに一瞬だけ何かを入力してしまった場合を考えてみてください。たとえその内容をすぐ消したとしても、ExcelはA1からA100000までを「使用範囲」として認識し続けます。この「使用範囲(Used Range)」の肥大化こそが、Excelでファイルサイズだけ異常に増える最大の原因なのです。
しかも、xlsx形式のファイルは実はZIP圧縮されたXMLファイルの集合体。内部では各セルの情報がXMLコードとして記録されているため、不要な書式が100万セル分残っていれば、それだけで膨大なXMLコードが生成されてしまいます。ある検証では、空のシートで行を非表示にしただけで8KBのファイルが340倍の約3MBにまで膨張したという報告もあります。
Excelでファイルサイズだけ異常に増える7つの本当の原因
では具体的に、何がファイルを太らせているのか?原因を1つずつ見ていきましょう。自分のファイルに当てはまるものがないか、チェックしながら読んでみてください。
原因1ゴーストセル(幽霊のような使用範囲)
これが最も多い原因です。Excelでは、列全体を選択して色を塗ると、1列あたり1,048,576個のセルに書式情報が記録されます。10列に色を塗れば、それだけで約1,048万セル分の書式データが内部に蓄積されるわけです。見た目にはたった10列ぶんの色付けでも、内部的にはとんでもない量の情報が生まれています。
確認方法はとても簡単です。シートの任意のセルで
Ctrl + End
を押してみてください。実際のデータがある範囲よりもはるか下、はるか右にカーソルが飛んでいったら、それがゴーストセルの証拠。あなたのファイルには、見えない幽霊データが大量に潜んでいます。
原因2「秘伝のタレ」状態の書式設定
Excelでは着色や罫線を適用するたびに、内部的にユニークなIDが1つずつ割り振られます。セルの色を黄色にして、消して、また赤にして、消して…と繰り返すと、古いIDはそのまま残り続けます。まるで老舗のうなぎ屋さんの「秘伝のタレ」のように、何年も何十年も継ぎ足し継ぎ足しで蓄積された書式データが、ファイルをどんどん重くしていくのです。
こうなると、セルの中身を全部クリアしても、数式を全削除しても、ファイルサイズはほとんど変わりません。「中身は空っぽなのにファイルだけデカい」という不思議な現象の正体がこれです。
原因3画像の落とし穴
Excelに画像を貼り付けるとき、多くの人はそのままドラッグ&ドロップしますよね。でも実は、スマートフォンで撮影した4000×3000ピクセルの写真をそのまま貼ると、1枚あたり数MBがファイルに追加されます。さらにExcel上でトリミング(切り抜き)しても、切り取った部分のデータは内部に隠れたまま残り続けます。Excel上では小さく見えていても、元の巨大な画像データがまるごと保持されているのです。
原因4ピボットテーブルのキャッシュ
ピボットテーブルを作成すると、Excelは元データの完全なコピーをキャッシュとしてファイル内部に保存します。つまり、同じデータが2重に存在することになり、ファイルサイズがほぼ倍増します。元データのシートを削除しても、このキャッシュは消えずに残ることが多いので、非常に厄介です。
原因5名前付き範囲の暴走
意外と見落とされがちなのが名前付き範囲(Named Range)の蓄積です。チーム内でファイルをやり取りしたり、外部のプラグインやアドインを使ったりすると、自分の知らないうちに何千もの名前付き範囲が作られていることがあります。ある企業のファイルでは2,600個以上の名前付き範囲が隠れていて、不要な2,500個を削除したところ、ファイルサイズが8MBから1MBに激減した事例もあります。
名前付き範囲の確認は
Ctrl + F3
でName Managerを開くことでできますが、隠し属性が設定されているものは通常の画面では見えないため注意が必要です。
原因6重い関数の多用
Excelの関数は、すべてが同じスピードで計算されるわけではありません。
SUM
や
IF
のような基本関数は軽量ですが、
VLOOKUP
、
SUMIF
、
SUMPRODUCT
、
COUNTIF
などのデータベース関数は、内部的にかなり高度な処理を行っているため、桁違いに計算時間がかかります。さらに、
INDIRECT
、
OFFSET
、
NOW
、
TODAY
といった揮発性関数(Volatile Function)は、シート内のどこかのセルが変更されるたびに全体が再計算されるため、パフォーマンスを著しく低下させます。
ある検証では、
SUM
関数を
OFFSET
関数に置き換えただけで、ファイルサイズが186MBから198MBに12MB増加したというデータもあります。関数の選び方ひとつで、ファイルの重さが大きく変わるのです。
原因71Bookに全部詰め込みすぎ問題
Excelの便利さゆえに陥りがちなのが、入力フォーム、集計表、マスタデータ、グラフ、月別シートなど、あらゆる目的のものを1つのBookに詰め込んでしまうパターンです。年月ごとにシートを増やし、関数が壊れるのが怖くて古いシートも消せない…。その結果、300シートを超える”怪物ファイル”が誕生するケースすらあります。
シート数が増えれば当然ファイルサイズも増大しますし、シート間の参照が複雑に絡み合うことで、再計算のたびにExcel全体が重くなります。
Excelファイルの肥大化を一発で診断する方法
原因がわかったところで、次は自分のファイルのどこが太っているのかを特定しましょう。ここでは、初心者でもすぐに実行できる診断手順を紹介します。
7-Zipでファイルの中身を丸裸にする
xlsxファイルは実はZIPファイルと同じ構造なので、7-Zip(Windows)やPeaZip(Mac)で中身を覗くことができます。ファイルを右クリックして「7-Zip → アーカイブを開く」を選択すると、内部のフォルダ構成が表示されます。とくに注目すべきは以下のフォルダです。
| フォルダ名 | 肥大化の原因 |
|---|---|
| xl/worksheets | シートのデータや書式が大きい場合、ここが膨れます。ゴーストセルや過剰な書式設定が原因です。 |
| xl/styles.xml | セルスタイルが蓄積されている場合に大きくなります。「秘伝のタレ」書式の温床です。 |
| xl/media | 画像ファイルが格納されています。高解像度画像がそのまま残っているケースに注意してください。 |
| xl/pivotCache | ピボットテーブルのキャッシュデータです。元データと二重に保存されている可能性があります。 |
| xl/embeddings | PDFやWordなど、埋め込みオブジェクトが格納されています。 |
各フォルダの「Packed Size」を確認すれば、どの要素がファイルを太らせているのかが一目瞭然です。Excelを開かなくても診断できるので、ファイルが重すぎて開けない場合にもこの方法は有効です。
Ctrl+Endで幽霊領域をチェックする
各シートで
Ctrl + End
を押し、カーソルが実データの範囲よりもはるかに遠くに飛んでいく場合は、そのシートにゴーストデータが潜んでいます。次に
Ctrl + Home
で先頭に戻り、
Ctrl + →
と
Ctrl + ↓
で実際のデータの終端を確認しましょう。2つの終端位置に大きなギャップがあれば、それが肥大化の犯人です。
ブックの統計情報を活用する
Excelの「校閲」タブ → 「ブックの統計情報」を使うと、各シートのセル数、数式の数、テーブル数などの概要を一覧で確認できます。隠しシートの存在もここで判明するので、まずは全体像の把握にとても役立ちます。
今すぐ実践できるExcelファイル軽量化7つのテクニック
診断が終わったら、いよいよ実際にファイルを軽くしていきましょう。ここからが本番です。必ず作業前にバックアップを取ってから始めてくださいね。
テクニック1ゴーストセルを完全に削除する
最も効果が高い方法です。実データの最終行の1つ下の行ヘッダーをクリックし、
Ctrl + Shift + ↓
でシート最下部まで選択します。そのまま右クリックして「削除」を選びます。ここで絶対にやってはいけないのが、キーボードのDeleteキーを押すこと。Deleteキーはセルの中身を消すだけで、書式情報やUsed Rangeはリセットされません。必ず右クリックメニューの「削除」を使ってください。同様に、実データの右隣の列から右方向にも同じ操作を行い、最後にファイルを保存します。
この操作1つで、35MBのファイルが2MBまで縮小した事例も報告されています。まずはここから試してみることを強くおすすめします。
テクニック22026年最新の「パフォーマンスチェック」機能を使う
Microsoft 365ユーザーなら、ぜひ活用してほしいのが「パフォーマンスをチェック(Check Performance)」機能です。もともとExcel for the Web版で2022年に登場し、その後Windows版にも展開された機能で、2026年現在はMac版への対応も進められています。
使い方はとても簡単。「校閲」タブ → 「パフォーマンスをチェック」をクリックするだけ。Excelが自動的に不要な書式設定やメタデータを検出し、シートごとに最適化の提案をしてくれます。右下の「すべて最適化」ボタンを押せばワンクリックで一括処理も可能です。ある実測データでは、3.14MBのファイルが17.5KBにまで縮小した驚異的な結果もあります。
ただし、空セルの背景色が「塗りつぶしなし」にリセットされるなど、見た目に変化が出る場合があるので、最適化前に必ず内容を確認してから実行してくださいね。
テクニック3画像を圧縮して軽くする
シート上の任意の画像をクリックし、「図の形式」タブ → 「図の圧縮」を選択します。ここで「この画像だけに適用する」のチェックを外せば、ブック内のすべての画像を一括で圧縮できます。解像度は、印刷しないなら「電子メール用(96ppi)」で十分です。さらに「図のトリミング部分を削除する」にもチェックを入れれば、トリミングで隠れていた元画像の不要部分も完全に除去できます。
もっと効果的なのは、画像をExcelに貼る前にあらかじめ圧縮しておくこと。TinyPNGなどの無料ツールを使えば、画質をほとんど落とさずにファイルサイズを最大90%削減できます。
テクニック4ピボットテーブルのキャッシュを無効にする
ピボットテーブル上で右クリックし、「ピボットテーブルオプション」を開きます。「データ」タブで「ソースデータをファイルに保存する」のチェックを外し、代わりに「ファイルを開くときにデータを更新する」にチェックを入れます。これで元データの二重保持がなくなり、ファイルサイズが大幅に削減されます。ただし、元データへのアクセスが常に必要になる点には注意してください。
テクニック5数式を値に変換する
もう計算結果が変わる必要のない数式は、思い切って値に変換しましょう。対象のセル範囲を選択して
F5
キー → 「セル選択」 → 「数式」を選ぶと、数式が入っているセルだけが選択されます。そのままコピーして、「貼り付け」 → 「値のみ」で上書きすれば完了です。
とくに
VLOOKUP
や
SUMIF
系の重い関数が何万行も入っている場合は、この方法だけで劇的にファイルサイズが軽くなり、操作のレスポンスも格段に向上します。
テクニック6xlsb形式(バイナリブック)で保存する
「名前を付けて保存」で「Excelバイナリブック(.xlsb)」を選ぶだけで、ファイルサイズが劇的に縮小します。通常のxlsx形式はXMLベースですが、xlsb形式はバイナリ形式で保存されるため、同じ内容でもサイズが大幅に小さくなります。とくに50MB超の巨大ファイルを扱う場合に効果が絶大です。
ただし、xlsb形式はPower Queryや一部のサードパーティツールとの互換性に制限がある場合があります。また、ファイルが破損した際の復旧が難しいというデメリットも報告されています。社内利用やパフォーマンス重視の場面で使い、外部共有用には通常のxlsx形式を使う、という使い分けがおすすめです。
テクニック7新しいBookに引っ越しする
上記の方法をすべて試してもまだ重い場合の最終手段がこれです。新規ブックを作成し、元ファイルから必要なデータだけを「数式のみ」または「値のみ」で貼り付けていきます。普通のコピー&ペーストをすると、書式情報もすべて一緒に持ち込まれてしまうので、絶対に通常のコピペはしないでください。
一度SYLK形式(.slk)で保存してから新しいBookに取り込む方法もあります。この方法なら数式を残したまま移行できるので、手入力を最小限に抑えられます。いずれの方法でも、移行後は必ず元のファイルと内容を突き合わせて検証してくださいね。思いがけない場所で数式が壊れていることがありますから。
プロが教える「太らせない」予防策
軽量化も大事ですが、そもそもファイルを太らせないことがもっと大事です。ここでは、日常の作業で意識するだけで肥大化を防げる予防策をお伝えします。
コピペの仕方を変えるだけで効果絶大
多くの人が無意識に
Ctrl + C
→
Ctrl + V
で貼り付けていますが、この操作はセルの書式情報(色、罫線、フォント、条件付き書式…)をすべて丸ごとコピーします。それだけで大きなメモリ空間を消費し、貼り付け先にも膨大な書式データが移植されてしまいます。単に数式や値だけをコピーしたい場合は、「貼り付け」の際に必ず「数式のみ」や「値のみ」を選択する習慣をつけましょう。
目的別にBookを分ける
「記入用」「集計用」「マスタデータ用」「レポート出力用」のように、目的ごとにファイルを分けることで、1つのBookに機能が集中するのを防げます。たとえば入力が目的なら、入力シートとプルダウン選択用シートだけのシンプルなBookで十分成立します。
揮発性関数を避ける
OFFSET
の代わりに
INDEX
を使う、
INDIRECT
の代わりに直接参照を使うなど、揮発性関数をできるだけ非揮発性の関数に置き換えましょう。また、複雑なネスト関数はヘルパー列(中間計算用の列)に分解することで、1つの数式の負荷を軽減できますし、メンテナンスもしやすくなります。
行全体・列全体の書式設定をしない
行番号や列番号をクリックして行全体・列全体を選択してから書式を適用するのは絶対に避けてください。1列を選択して色を塗っただけで、100万セル以上に書式が適用されます。必ず、実際にデータがある範囲だけを選択して書式を設定する癖をつけましょう。
2026年のExcel最新機能で肥大化に立ち向かう
2026年のExcelには、ファイル肥大化と戦うための心強い新機能がいくつか追加されています。
まず前述した「パフォーマンスをチェック」機能が、Web版・Windows版に加えてMac版への展開も進行中です。ファイルを開いた際に自動的に問題を検出して通知バーで知らせてくれるので、知らず知らずのうちにファイルが太っていた…という事態を未然に防げます。
さらに2026年のアップデートでは、「データのクリーンアップ」ボタンがワンクリックでデータの不整合を検出・修正してくれる機能や、数式のオートコンプリート機能が登場しています。数式を入力中にAIが候補を提案してくれるため、無駄に複雑な数式を書いてしまうリスクが減り、結果としてファイルの軽量化にも寄与します。
ピボットテーブルの自動更新機能も改善され、元データの変更を自動で検知して更新するようになりました。これにより、手動更新のために大量のキャッシュを保持する必要性が軽減されています。
情シス歴10年超の現場で遭遇した「誰も教えてくれない」肥大化トラブル実録
ここからは、情報システム部門で10年以上、数えきれないほどのExcelトラブルに対応してきた視点から、ネットの記事にはまず書かれない「現場のリアル」をお話しします。教科書的な対策は世の中にいくらでもありますが、実際の業務現場ではもっと泥臭い、もっとやっかいな問題が起きるものです。
「条件付き書式」が静かにファイルを殺す問題
情シスとして断言しますが、ファイル肥大化の”隠れた最凶犯人”は条件付き書式です。ゴーストセルや画像の話はネット上にたくさんありますが、条件付き書式の恐ろしさを正確に理解している人は驚くほど少ない。
何が起きるかというと、条件付き書式が設定されたテーブルやセル範囲で行の挿入・削除を繰り返すと、Excelが勝手にルールを複製し続けるのです。たとえば最初は2つだけだったルールが、半年間の日常業務で行の追加削除を繰り返すうちに、気づいたときには数百行ものルールに膨れ上がっていた…というケースを、私は何度も目にしてきました。
しかもこの増殖は完全に無音で進行します。条件付き書式のルールマネージャーを開いて初めて「何じゃこりゃ!」と気づくわけですが、そのルールマネージャー自体が数百ルールの重さで固まって開けない、というオチまでつくことがあります。
確認方法は、「ホーム」タブ → 「条件付き書式」 → 「ルールの管理」を開き、上部のドロップダウンで「このワークシート」を選択してください。ここでルールが数十行以上表示された場合は、もうかなり深刻な状態です。とくに「適用先」の列に
$A$1:$A$9,$A$11:$A$20
のようなカンマ区切りの断片化したアドレスが並んでいたら、行の削除によるルールの分裂が起きている証拠です。
共有ブックの「ゴーストユーザー」問題
これは企業の共有フォルダでExcelを複数人で使っている現場で、ほぼ100%遭遇する問題です。共有ブック機能を使っているとき、ネットワーク切断やExcelの異常終了が発生すると、その人の接続情報が「幽霊ユーザー」としてブック内に残り続けます。Excelはこの幽霊ユーザーとの同期用に変更履歴データを内部に蓄積し続けるため、誰も編集していないのにファイルサイズだけが増え続けるという奇怪な現象が起きます。
対処法は「校閲」タブ → 「ブックの共有」で「現在このブックを開いているユーザー」一覧を確認し、実際にはファイルを開いていないのに名前が残っているユーザーを選んで「ユーザーの削除」をクリックします。ただしこの操作は、削除対象のユーザーが本当にファイルを閉じていることを必ず確認してから行ってください。作業中のユーザーを強制切断すると、その人の未保存データが消失します。
「ドキュメント検査」で見えない個人情報ごと削ぎ落とす
意外と知られていませんが、Excelファイルには作成者名、最終編集者名、コメント、ドキュメントプロパティ、非表示の行・列、カスタムXMLデータなど、ファイルサイズを地味に圧迫するメタデータが大量に埋まっています。とくに社外にファイルを送る前には、セキュリティの観点からもこのメタデータの削除が重要です。
「ファイル」 → 「情報」 → 「問題のチェック」 → 「ドキュメント検査」を実行すると、非表示の行・列、コメント、個人情報、カスタムXMLデータなどをカテゴリ別に検出してくれます。各カテゴリの「すべて削除」をクリックすれば一括で除去できます。あるクライアントのファイルでは、この操作だけでファイルサイズが15%ほど減ったこともあります。
現場で本当に使えるVBAマクロ集(動作検証済み)
ここからは、私が実際の現場で何度も使い、効果を確認してきたVBAマクロを紹介します。すべてのコードはExcel 2016、Excel 2019、Excel 2021、Excel for Microsoft 365(バージョン2312以降)のWindows版で動作検証済みです。Mac版Excelでは一部の挙動が異なる可能性がありますのでご注意ください。また、Excel 2013以前のバージョンでは、シートの最大行数やAPIの仕様が異なるため正常に動作しない場合があります。
重要な注意事項VBAマクロの実行前には必ず元ファイルのバックアップを取ってください。マクロによる変更は「元に戻す(Undo)」が効きません。
マクロ1全シートのゴーストセルを一括リセットする
このマクロは、ブック内のすべてのシートに対して、実データが存在する最終行・最終列を検出し、その外側の不要な行と列を一括で削除します。もっとも基本的かつ効果の高い軽量化マクロです。
Sub ResetAllSheetsUsedRange()
Dim ws As Worksheet
Dim lastRow As Long
Dim lastCol As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
For Each ws In ThisWorkbook.Worksheets
On Error Resume Next
'実データの最終行を検出
lastRow = ws.Cells.Find(What:="*", _
After:=ws.Cells(1, 1), _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
'実データの最終列を検出
lastCol = ws.Cells.Find(What:="*", _
After:=ws.Cells(1, 1), _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
On Error GoTo 0
'データが存在しない空シートはスキップ
If lastRow = 0 Or lastCol = 0 Then GoTo NextSheet
'不要な行を削除(実データの次の行からシート最下部まで)
If lastRow < ws.Rows.Count Then
ws.Rows(lastRow + 1 & ":" & ws.Rows.Count).Delete
End If
'不要な列を削除(実データの次の列からシート最右列まで)
If lastCol < ws.Columns.Count Then
ws.Range(ws.Cells(1, lastCol + 1), _
ws.Cells(1, ws.Columns.Count)).EntireColumn.Delete
End If
NextSheet:
Next ws
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
MsgBox "全シートのUsedRangeをリセットしました。" & vbCrLf & _
"ファイルを保存してください。", vbInformation
End Sub
使い方の手順
Alt + F11
でVBAエディタを開き、「挿入」→「標準モジュール」を選択。上記コードを貼り付けて
F5
で実行します。実行後、必ずファイルを「名前を付けて保存」で保存してください。上書き保存ではUsedRangeが完全にリフレッシュされない場合があります。
現場での注意点このマクロはシート保護がかかっているシートではエラーになります。実行前にすべてのシートの保護を解除しておく必要があります。また、図形(Shape)やグラフオブジェクトがデータ範囲外に配置されている場合、それらの位置情報がずれる可能性があります。図形が多いファイルでは事前に配置を確認しておくことをおすすめします。
マクロ2条件付き書式の重複ルールを一掃する
前述した「条件付き書式の静かな暴走」を解決するマクロです。各シートの条件付き書式ルールの総数をカウントし、指定した閾値を超えているシートの全ルールを削除します。
Sub CleanConditionalFormatting()
Dim ws As Worksheet
Dim ruleCount As Long
Dim totalCleaned As Long
Dim threshold As Long
Dim msg As String
threshold = 20 '閾値この数を超えたシートのルールを削除対象にする
totalCleaned = 0
msg = ""
For Each ws In ThisWorkbook.Worksheets
ruleCount = ws.Cells.FormatConditions.Count
If ruleCount > threshold Then
msg = msg & ws.Name & "" & ruleCount & "個のルール" & vbCrLf
totalCleaned = totalCleaned + ruleCount
End If
Next ws
If totalCleaned = 0 Then
MsgBox "閾値(" & threshold & "個)を超えるシートはありませんでした。", _
vbInformation
Exit Sub
End If
Dim result As VbMsgBoxResult
result = MsgBox("以下のシートで条件付き書式が異常に多くなっています" & _
vbCrLf & vbCrLf & msg & vbCrLf & _
"合計 " & totalCleaned & " 個のルールを削除しますか?" & vbCrLf & _
"(この操作は元に戻せません)", _
vbYesNo + vbExclamation)
If result = vbNo Then Exit Sub
For Each ws In ThisWorkbook.Worksheets
If ws.Cells.FormatConditions.Count > threshold Then
ws.Cells.FormatConditions.Delete
End If
Next ws
MsgBox "条件付き書式のクリーンアップが完了しました。", vbInformation
End Sub
補足このマクロは閾値(デフォルト20個)を超えるシートの条件付き書式をすべて削除します。必要な条件付き書式まで消えてしまうため、実行前に各シートのルール内容を確認し、必要なルールの設定条件をメモしておいてください。削除後に改めて正しいルールだけを再設定するのがベストです。
マクロ3隠れた名前付き範囲を検出して一括削除する
外部プラグインや他のブックからのコピーで大量に蓄積された名前付き範囲を、隠し属性のものも含めてすべて検出・削除するマクロです。Name Manager(
Ctrl + F3
)では表示されない隠しNameも対象にできるのがポイントです。
Sub CleanUpNamedRanges()
Dim nm As Name
Dim hiddenCount As Long
Dim refErrCount As Long
Dim totalCount As Long
Dim deleteCount As Long
Dim msg As String
hiddenCount = 0
refErrCount = 0
totalCount = ActiveWorkbook.Names.Count
deleteCount = 0
'事前カウント
For Each nm In ActiveWorkbook.Names
If nm.Visible = False Then hiddenCount = hiddenCount + 1
If InStr(1, nm.Value, "#REF!") > 0 Then refErrCount = refErrCount + 1
Next nm
msg = "名前付き範囲の状況" & vbCrLf & _
" 総数" & totalCount & " 個" & vbCrLf & _
" うち隠し属性" & hiddenCount & " 個" & vbCrLf & _
" うち#REF!エラー" & refErrCount & " 個" & vbCrLf & vbCrLf
Dim delOption As VbMsgBoxResult
delOption = MsgBox(msg & _
"【はい】#REF!エラーと隠しNameだけを削除" & vbCrLf & _
"【いいえ】Print_Area以外のすべてを削除" & vbCrLf & _
"【キャンセル】何もしない", _
vbYesNoCancel + vbQuestion)
If delOption = vbCancel Then Exit Sub
Dim i As Long
'逆順ループで削除(コレクション操作の安全策)
For i = ActiveWorkbook.Names.Count To 1 Step -1
On Error Resume Next
Set nm = ActiveWorkbook.Names(i)
If delOption = vbYes Then
'隠しNameまたは#REF!エラーだけを削除
If nm.Visible = False Or InStr(1, nm.Value, "#REF!") > 0 Then
nm.Delete
deleteCount = deleteCount + 1
End If
ElseIf delOption = vbNo Then
'Print_Area以外をすべて削除
If Right(nm.Name, 10) <> "Print_Area" And _
InStr(1, nm.Name, "Print_Area") = 0 Then
nm.Delete
deleteCount = deleteCount + 1
End If
End If
On Error GoTo 0
Next i
MsgBox deleteCount & " 個の名前付き範囲を削除しました。" & vbCrLf & _
"残り" & ActiveWorkbook.Names.Count & " 個", vbInformation
End Sub
ここが重要名前付き範囲の削除は非常にデリケートな操作です。データ入力規則(ドロップダウンリスト)のソースに名前付き範囲を使っている場合、その名前を消すとドロップダウンが壊れます。また、VBAマクロ内から名前付き範囲を参照しているケースもあるため、削除前に
Ctrl + F3
で各Nameの「参照先」と「スコープ」を必ず確認してください。迷ったときは「#REF!エラーと隠しNameだけを削除」の安全な選択肢を選びましょう。
マクロ4ファイルサイズ診断レポートを自動生成する
「どのシートが犯人なのか」をVBAで自動分析し、レポートとして出力するマクロです。各シートのUsedRange、数式セル数、条件付き書式ルール数、図形オブジェクト数を一覧にまとめます。
Sub GenerateFileSizeReport()
Dim ws As Worksheet
Dim rptWs As Worksheet
Dim r As Long
Dim lastRow As Long, lastCol As Long
Dim formulaCount As Long
Dim cfCount As Long
Dim shapeCount As Long
'既存のレポートシートがあれば削除
Application.DisplayAlerts = False
On Error Resume Next
ThisWorkbook.Sheets("_サイズ診断レポート").Delete
On Error GoTo 0
Application.DisplayAlerts = True
Set rptWs = ThisWorkbook.Sheets.Add(After:= _
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
rptWs.Name = "_サイズ診断レポート"
'ヘッダー作成
rptWs.Range("A1").Value = "シート名"
rptWs.Range("B1").Value = "UsedRange最終行"
rptWs.Range("C1").Value = "UsedRange最終列"
rptWs.Range("D1").Value = "数式セル数"
rptWs.Range("E1").Value = "条件付き書式ルール数"
rptWs.Range("F1").Value = "図形オブジェクト数"
rptWs.Range("G1").Value = "危険度判定"
rptWs.Range("A1:G1").Font.Bold = True
r = 2
For Each ws In ThisWorkbook.Worksheets
If ws.Name = "_サイズ診断レポート" Then GoTo NextWs
rptWs.Cells(r, 1).Value = ws.Name
On Error Resume Next
lastRow = ws.UsedRange.Rows(ws.UsedRange.Rows.Count).Row
lastCol = ws.UsedRange.Columns(ws.UsedRange.Columns.Count).Column
formulaCount = 0
formulaCount = ws.UsedRange.SpecialCells(xlCellTypeFormulas).Count
cfCount = ws.Cells.FormatConditions.Count
shapeCount = ws.Shapes.Count
On Error GoTo 0
rptWs.Cells(r, 2).Value = lastRow
rptWs.Cells(r, 3).Value = lastCol
rptWs.Cells(r, 4).Value = formulaCount
rptWs.Cells(r, 5).Value = cfCount
rptWs.Cells(r, 6).Value = shapeCount
'危険度を判定
Dim risk As String
risk = "◎安全"
If lastRow > 100000 Or lastCol > 100 Then risk = "△要注意"
If formulaCount > 50000 Then risk = "△要注意"
If cfCount > 50 Then risk = "▲危険"
If lastRow > 500000 Then risk = "▲危険"
If cfCount > 200 Then risk = "×即対処"
rptWs.Cells(r, 7).Value = risk
r = r + 1
NextWs:
Next ws
rptWs.Columns("A:G").AutoFit
rptWs.Activate
MsgBox "診断レポートを「_サイズ診断レポート」シートに出力しました。", vbInformation
End Sub
このマクロを実行すると、ブック内に「_サイズ診断レポート」というシートが自動作成され、各シートの肥大化リスクが一目でわかる一覧表が出力されます。危険度が「×即対処」と判定されたシートから優先的に対策を進めてください。
現場でよく遭遇するけど解決法がわからない問題への処方箋
「名前を付けて保存」しただけでファイルサイズが倍になる問題
これ、実際にめちゃくちゃ多い相談です。元のファイルが5MBだったのに、「名前を付けて保存」したら10MBになっている。何もしていないのに、です。
原因は大きく2つ考えられます。1つ目は、ファイル形式の変換です。xls形式(旧形式)からxlsx形式に保存した場合は通常小さくなりますが、逆にxlsx形式からxls形式に保存すると、テキストデータが多いファイルほどサイズが倍以上に膨れることがあります。保存ダイアログの「ファイルの種類」が意図した形式になっているか必ず確認してください。
2つ目は、Excel自体が保存時に内部構造を再構築する過程で、一時的にゴミデータが増えるケースです。この場合は、一度ファイルを閉じてから再度開き、もう一度「名前を付けて保存」をすると正常なサイズに戻ることが多いです。「保存 → 閉じる → 開く → 再保存」のサイクルを覚えておくと、この手の問題に振り回されなくなります。
ソート(並べ替え)するたびにファイルが膨れる問題
データを並べ替えただけなのにファイルサイズが増える。これは情シスでも「えっ?」と首をかしげる現象ですが、実際に起きます。
Excelはソート操作を行うとき、内部的にセルの移動情報を一時キャッシュとして保持します。とくに条件付き書式やデータ入力規則が設定されている範囲をソートすると、ルールの再適用処理が走り、結果的にメタデータが増殖することがあります。
対処法は単純で、ソート後にファイルを保存して閉じ、再度開いて保存し直す。これだけで膨れた分が元に戻ります。地味ですが確実な方法です。慌てて「ファイルがおかしくなった!」と騒ぐ前に、まずこの閉じて開き直し保存を試してみてください。
「Deleteで消したのにCtrl+Endがまだ遥か彼方」問題
記事前半でも触れた話ですが、実際の現場ではもう一歩踏み込んだ対応が必要になるケースがあります。右クリック「削除」をしてもCtrl+Endが戻らない場合です。
これは、ファイルを保存して閉じないとUsedRangeがリセットされないというExcelの仕様が原因です。削除しただけでは内部的にはまだ古い範囲が記録されたまま。必ず「保存 → 閉じる → 開き直す」の3ステップを踏んでから、Ctrl+Endで確認してください。
それでもまだ遠くに飛ぶ場合は、VBAエディタのイミディエイトウィンドウで以下の1行を実行してみてください。
ActiveSheet.UsedRange
これはVBAからUsedRangeプロパティを参照するだけのコマンドですが、内部的にExcelにUsedRangeの再計算を強制する効果があります。実行後に保存し直せば、多くの場合はCtrl+Endが正しい位置に戻ります。Excel 2016以降のすべてのバージョンで動作します。
32bit版Excelで大きなファイルを操作するとフリーズする問題
2026年の今でも、企業環境では32bit版のOfficeがインストールされているPCが少なくありません。32bit版Excelはメモリを最大約2GBしか使えないため、大容量ファイルの操作(大量行の削除、ソート、コピペなど)で簡単にメモリ不足に陥り、「応答なし」になります。
まず自分のExcelが32bitか64bitかを確認しましょう。「ファイル」→「アカウント」→「Excelのバージョン情報」で表示されます。もし32bit版で大きなファイルを扱う必要がある場合は、一度に大量の行を削除しようとせず、1000行ずつなど少しずつ削除して保存を繰り返すアプローチが安全です。VBAマクロで一括削除するときも、
Application.ScreenUpdating = False
と
Application.Calculation = xlCalculationManual
の設定は必須です。
OneDrive/SharePoint上のファイルが異常に膨れる問題
クラウドストレージ上でExcelファイルを共同編集しているときに、ローカル保存時よりもファイルサイズが大きくなる現象があります。これは、OneDriveやSharePointがバージョン履歴や共同編集のための差分データをファイル内部に保持していることが原因です。
対処法として最も効果的なのは、ファイルを一度ローカルにダウンロードし、Excelで開いて「名前を付けて保存」で新しいファイルとしてローカルに保存します。これでクラウド同期用のメタデータがリフレッシュされます。その後、この新しいファイルをOneDriveに再アップロードすれば、クリーンな状態からやり直せます。
上級者向けXMLレベルでの外科的なファイル修復
ここからは、通常の方法ではどうにもならない重症ファイルのための最終手段です。xlsx形式はZIP圧縮されたXMLファイルの集合体であるという特性を利用して、ファイルの内部構造を直接編集します。
XMLを直接編集してゴーストデータを除去する手順
- 対象のxlsxファイルのバックアップを必ず取り、コピーしたファイルの拡張子を
.xlsxから
.zipに変更します。
- ZIPファイルを展開すると、
xl/worksheets/フォルダ内にsheet1.xmlなどのファイルがあります。これが各シートの実データです。
- サイズが異常に大きいsheetN.xmlをテキストエディタ(メモ帳よりもVisual Studio CodeやNotepad++を推奨)で開きます。
-
<dimension ref="A1:XFD1048576"/>のような記述を探し、実際のデータ範囲に合わせて修正します(例
<dimension ref="A1:F500"/>)。
- データ範囲外の
<row>タグを削除します。膨大な量になるため、テキストエディタの正規表現による一括置換が便利です。
- 編集後のXMLファイルを元のZIPに上書きし、拡張子を
.zipから
.xlsxに戻します。
- Excelで開くと「ファイルの修復」を促されることがあるので、「はい」を選択してファイルを回復させます。
注意XMLの手動編集は、タグの閉じ忘れや構造の不整合でファイルが完全に壊れるリスクがあります。必ずバックアップを取った上で、コピーに対してのみ作業してください。また、この方法はxlsb(バイナリ形式)ファイルには使えません。バイナリ形式は内部がXMLではないため、テキストエディタでの編集はできません。
styles.xmlの肥大化を手動で解消する
長年使い続けたファイルで「秘伝のタレ」状態の書式が蓄積している場合、
xl/styles.xml
のサイズが数MBに達していることがあります。中を開くと、実際には使われていないフォント定義、塗りつぶし定義、罫線定義が何千行も並んでいることに気づくでしょう。
ただしstyles.xmlの編集は非常にリスクが高いため、XMLレベルでの対処よりも、新しいBookに値と数式だけを移植する方法のほうが現実的で安全です。どうしてもXMLを編集する場合は、各スタイル要素のインデックス番号とシートXML側の参照が整合している必要がある点を理解した上で、慎重に作業してください。
「そもそもExcelでやるべきなのか?」という根本的な問い
情シスとして長年Excelトラブルに対応してきた経験から、ここで一番大事なことを言わせてください。ファイルが10MBを超えたら、そのファイルはExcelの適正範囲を超えている可能性が高いということです。
Excelはあくまでも表計算・データ分析ツールであって、データベースではありません。データの蓄積が主目的なら、AccessやSQL Serverなどのデータベースに移行する方が根本的な解決になります。数千行のデータならExcelファイルを分離するだけで十分ですが、数万行を超えるならデータベースとExcelをODBC接続で連携させる構成が理想的です。
「でもAccessって難しそう…」と感じるかもしれません。最近はMicrosoft 365のPower QueryやDataverseといった選択肢もあります。Power Queryを使えば、外部データソースからExcelにデータを取り込んで分析し、元データ自体はExcelファイル内に保持しないという運用が可能です。これだけでファイルの肥大化問題の大部分は解決します。
ぶっちゃけこうした方がいい!
ここまで読んでくれたあなたに、情シス10年超の人間として本音をぶっちゃけます。
正直に言うと、ファイルが重くなってからあれこれ対策するのって、虫歯になってから歯医者に行くのと同じなんですよね。痛くなってから慌てて治療するより、毎日歯を磨く方がはるかに楽で安いじゃないですか。Excelも同じです。
だから個人的には、ぶっちゃけこうした方が楽だし効率的だと思っています。まず、月に1回「ファイル棚卸しの日」を作ること。大げさに聞こえるかもしれませんが、やることは簡単です。よく使うExcelファイルを開いて、先ほど紹介したマクロ4の「ファイルサイズ診断レポート」を走らせるだけ。5分もかかりません。危険度が高いシートが見つかったら、その場でマクロ1のゴーストセルリセットを実行する。これだけで、ファイルが「手遅れ」になる前に手を打てます。
次に、コピペの習慣をたった1つだけ変えること。普段の
Ctrl + V
を、
Ctrl + Alt + V
(貼り付けのオプション)に変えるだけ。この1アクションの追加で、不要な書式データの拡散を99%防げます。最初は面倒に感じますが、1週間もすれば体が勝手に覚えます。
そして何より伝えたいのは、「1つのファイルに全部盛り」をやめることの圧倒的な効果です。入力用、集計用、マスタ用とファイルを分けるだけで、各ファイルはスリムなまま何年でも快適に使い続けられます。「でもファイルが分散すると管理が大変…」と思うかもしれませんが、10MBのモンスターファイルが壊れて1日分の作業が飛ぶリスクと、ファイル3つに分けてそれぞれ管理する手間と、どちらがコスト高いですか?答えは明白ですよね。
結局のところ、Excelの肥大化対策って技術的な話のように見えて、本質は「運用の仕方」の問題なんです。どんなに優れたVBAマクロを持っていても、毎日全列に色を塗り直す運用をしていたら、いたちごっこですから。ファイルが重くなるのはExcelが悪いんじゃなくて、Excelに無理をさせている使い方が原因です。道具の特性を理解して、適切な範囲で使う。その意識だけで、Excelライフは劇的に快適になります。今日から1つでも実践してみてください。
Excelでファイルサイズだけ異常に増えることに関するよくある疑問
データを全部消したのにファイルサイズが変わらないのはなぜですか?
Deleteキーでセルの中身を消しても、書式設定(色、罫線、フォント、条件付き書式など)は残ったままです。Excelは書式が設定されているセルも「使用中」と判断するため、ファイルサイズに反映されません。書式ごと完全に消すには、「ホーム」タブの「クリア」 → 「書式のクリア」を実行するか、行・列ごと右クリックで「削除」する必要があります。その後、必ずファイルを保存し直してください。
xlsb形式に変えるとデータが壊れることはありますか?
xlsb形式自体がデータを壊すことは通常ありません。ただし、バイナリ形式はテキストベースのxlsxと違い、万が一ファイルが破損した場合の復旧がかなり難しくなります。また、Power Queryの一部機能や外部ツールとの連携で制約が出る場合があります。定期的にxlsx形式でもバックアップを取っておくことを強くおすすめします。
「パフォーマンスをチェック」機能が見つかりません。どうすればいいですか?
この機能はMicrosoft 365のサブスクリプションユーザー向けに段階的に展開されています。買い切り版のExcel 2024では利用できない場合があります。まずExcelを最新バージョンに更新してみてください。それでも表示されない場合は、Web版のExcel Onlineから同じファイルを開けば、ほぼ確実にこの機能を利用できます。
VBAマクロで自動的にファイルを軽くすることはできますか?
はい、可能です。各シートの使用範囲を検出し、データのない行や列を自動で削除するVBAマクロを作成することで、手作業の手間を大幅に省けます。ただし、マクロの実行前には必ずバックアップを取り、削除対象に重要なデータが含まれていないか確認してください。
Excelで10万行を超える大量データを扱う場合はどうすべきですか?
そもそもExcelはデータベースツールではなく、分析・可視化ツールです。10万行を超えるようなデータを日常的に扱うなら、Microsoft AccessやSQL Serverなどのデータベースへの移行を検討すべきです。ExcelからデータベースにODBC接続すれば、Excelの使い慣れたインターフェースはそのままに、重たいデータだけを外部に切り出すことができます。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良...もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
Excelでファイルサイズだけ異常に増える現象は、「データが多いから」ではなく、目に見えないゴーストセルや蓄積された書式データ、隠れたキャッシュが原因です。まずは
Ctrl + End
でゴーストセルの有無を確認し、不要な行・列を「右クリック → 削除」で完全に除去してください。Microsoft 365ユーザーなら「パフォーマンスをチェック」機能の活用もぜひ試してみてください。そして何より、日々のコピペの方法を見直し、目的別にBookを分けるという予防策が、長期的に最も効果的です。今日からできることを1つずつ実践して、あなたのExcelファイルをスッキリ軽快に生まれ変わらせましょう。






コメント