行を選んで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に戻る。
使用範囲が残ったままだと、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の差は、数値だけの表では出なかった。文字列が多い表や、書式の種類が多い表では変わる可能性がある。そちらは試していない。



