Excelのファイルが重い。消し方で1,907KBと41KBに分かれた

2026-09-22Excelの使い方

行を選んでDeleteキーを押しても、ファイルは軽くならない。消えるのは値だけで、書式はセルに残るからだ。

1,000行の表に、使っていない行の書式が残ったブックで試した。Deleteキーでは1,907KBのまま変わらず、行ごと削除すると41KBになった。46分の1だ。

重いブックを軽くする順番。最後のセルの位置、条件付き書式の本数、数式の本数を順に見る

以下の数は、Microsoft 365のExcel(バージョン16)で実際に作って保存して測ったものだ。確認日は2026年9月22日。Windows 11で、同じ機械で3回開いていちばん速い時間を取っている。表は1,000行10列で、中身は数値だけにしてある。

使っていない6万行に色を付けただけで、39KBが1,907KBになった

段階を分けて測った。

素の1,000行10列のブックは39KBだった。ここから順に足していく。

A列からJ列の列全体に罫線と書体を付けると41KBになった。2KBしか増えない。

そのあと、1,002行目から60,000行目までに薄い色を付けると1,907KBになった。46倍だ。値は1つも増えていない。

そこに条件付き書式を500本足すと1,916KBになった。500本でも9KBしか増えない。

つまり太らせているのは、使っていない行のセルに付いた書式だけになる。

列全体に書式を付けても、ほとんど太らない

39KBから41KBへの2KBは、覚えておく価値がある。

列全体に書式を付けるのはやめろ、という話をよく見る。測ると、そちらはほとんど太らない。Excelは列全体の書式を列の属性として1か所に持つので、セルの数だけ書くわけではない。

太るのは、行と列で囲まれた四角い範囲を選んで書式を付けたときだ。この場合はセルが1つずつ書き出される。1,002行目から60,000行目までのA列からJ列で、589,990個のセルが書式だけの状態で残っていた。

だから直すときも、列全体に付けた書式を外すより、使っていない行を消すほうが効く。

Deleteキーで消しても1KBも減らない

1,907KBのブックを3つ複製して、消し方を変えて保存し直した。

Deleteキーで内容だけ消すと1,907KBのままだった。1KBも減らない。値は消えるが、書式はセルに残っている。

範囲を選んで書式もまとめて消すと203KBになった。書式は消えたが、ブックが宣言している使用範囲はA1:J60000のまま残る。開き直しても同じだった。

行ごと削除すると41KBになった。使用範囲もA1:J1001に戻る。

同じブックを3通りの消し方で軽くした。Deleteキーで1,907KB、書式ごと消して203KB、行ごと削除して41KB

使用範囲が残ったままだと、CtrlキーとEndキーで最後のセルへ飛んだときに60,000行目まで飛ぶ。画面上は何も入っていないのに、スクロールバーが極端に小さくなる。あの状態はこれだ。

行ごと削除すると、開く時間も11分の1になる

大きさだけでなく、開く時間も測った。

1,916KBのブックを開くのに0.87秒かかった。掃除した42KBのブックは0.08秒だった。11分の1になる。

同じ中身をバイナリ形式のxlsbで保存すると42KBで、開く時間は0.05秒だった。今回の中身では、掃除したxlsxとxlsbの大きさは変わらなかった。数値だけの表なので、圧縮の効き方に差が出なかったのだと思う。

1秒に満たない差だが、これは1,000行の表での話だ。実務のブックは数万行あって、シートも何枚もある。同じ割合で効くなら、10秒が1秒になる。

数式を値に変えると24%減る

数式の本数も測った。

1万本の数式が入った状態で194KB、値に変えると148KBになった。46KB、24%減る。

数式は、式そのものと計算結果の両方が保存される。値にすれば式のぶんが消える。

ただし削るためだけに値へ変えるのはよくない。あとから計算の根拠が追えなくなる。締めた期間のシートだけ値にして、今動いている期間は数式のまま残す、という分け方にする。

フィルターと合計の話で使った作業列のように、計算の途中を残す列は特にそうで、消すと検算ができなくなる。

どこが重いかを数えるスクリプト

軽くする前に、どこが重いのかを見る。xlsxは中身がzipなので、開いて部品の大きさを並べれば分かる。Excelを立ち上げずに読めるスクリプトを置いた。

python book-check.py ブック.xlsx

さっきの1,916KBのブックにかけると、こう出る。

  ファイルの大きさ 1,915 KB / 中の部品を広げると 16,678 KB

  大きい部品
    xl/worksheets/sheet1.xml                   16,624 KB   100%
    xl/styles.xml                                  39 KB     0%

  シート
    明細
      宣言している範囲 A1:J60000        値が入っている範囲 A1:J1001
      値のあるセル 10,010 / 書式だけのセル 589,990 / 行の数 60,000
      条件付き書式 500 本(範囲 500 か所) / 結合 0 か所
      値の最後より下に 58,999 行ぶんの書式が残っている

  直すところ
    明細 の 1002 行目から下を、行ごと選んで削除して保存し直す

値のあるセルと書式だけのセルを分けて数えるので、どちらが多いかで原因が決まる。掃除したあとのブックにかけると、書式だけのセルは0になる。

画像が入っているブックでは、xl/mediaの合計が出る。画像が半分以上を占めていれば、消すべきは行ではなく画像になる。

結合の数も出している。セル結合をやめた表の2枚を比べると、結合ありのほうは結合4か所と書式だけのセル116個が出る。

標準のライブラリだけで動くので、追加の用意は要らない。会社の端末で外から何も入れられないときも動く。

ピボットは元データをもう一度持つ

ピボットテーブルも測った。5,000行6列の明細だけのブックが161KBで、そこにピボットを1つ作ると202KBになった。41KB、25%増える。

増えたぶんはキャッシュだ。ピボットは集計を速くするために、元データの写しをブックの中に持つ。だから明細のシートを消してもピボットは動く。

ピボットを右クリックしてピボットテーブルオプションを開き、データのタブでソースデータをファイルに保存するのチェックを外すと165KBになった。37KB戻る。

外したぶん、開いたときには中身が空になる。同じ画面で、ファイルを開くときにデータを更新するにチェックを入れておくと、開いたときに作り直される。明細が同じブックの中にあるなら、この組み合わせで持つぶんが減る。

明細が別のブックや外のデータベースにある場合は、チェックを外すと開くたびに取りに行く。つながらない場所で開くと空のままになるので、そちらは外さない。

画像は縮めて貼っても元の大きさのまま入る

画像も測った。202KBのPNGを1枚貼って保存すると、ブックは212KBになった。中を開くと画像は202KBのまま入っている。

貼ったあとに画面で小さく縮めても、入っているのは元の大きさのままだ。縮小は表示の指定でしかない。

同じ画像を10枚貼ったブックは213KBだった。1枚のときとほとんど変わらない。中の画像は1個だけで、10枚が同じ1個を指している。同じ図を何か所にも貼るのは、大きさの面では気にしなくていい。

逆に、違う画像を10枚貼れば10個ぶん入る。スクリーンショットを10枚貼った手順書が何MBにもなるのはこれだ。貼る前に画像を縮めておくか、図の形式のタブにある図の圧縮を使う。

掃除する順番

見る順番は決まっている。

まずCtrlキーとEndキーを押す。実際のデータより下や右に飛んだら、その1行下から最後までを行ごと選んで削除する。列も同じように右端まで削除する。そのあと上書き保存して閉じ、開き直して位置を確かめる。保存し直すまで最後のセルの位置は戻らない。

次に条件付き書式の本数を見る。ホームタブの条件付き書式からルールの管理を開く。同じ式のルールが何十本も並んでいたら、全部消して1本で付け直す。

そのあと数式の本数を見る。終わった期間のシートだけ値にする。

最後に図形と画像を見る。ホームタブの検索と選択からオブジェクトの選択を使うと、透明な図形も選べる。

確かめていないこと

共有ブックと変更履歴も確認していない。古い形式の共有ブックは履歴が溜まると太るという話があるが、再現できていない。

xlsbとxlsxの差は、数値だけの表では出なかった。文字列が多い表や、書式の種類が多い表では変わる可能性がある。そちらは試していない。

動作確認: Microsoft 365のExcel(バージョン16) / Windows 11 / 2026-09-22確認

Excelファイルサイズ書式スクリプト検算