重いExcelの悲劇と原因究明

夕方17時半、帰宅準備を始めようとしたその瞬間に悲劇は起こる。社内システムからCSVをエクスポートし。いつもの集計用Excelにデータを貼り付けた。画面がわずかに白く濁る。マウスカーソルが青いドーナツ型に変わり、ぐるぐると回転し始めた。タイトルバーには「応答なし」の文字が表示されている。この絶望感を何度味わってきたかわからありません。
急ぎの締め切りがある日に限って。あと1行追加したら終わるという場面でExcelが固まった。Ctrl+Sを押した瞬間に画面がフリーズし、30分待っても戻らない。タスクマネージャーから強制終了して再起動すると、自動保存がうまく機能しておらず。午後からの作業データが全て虚空に消え去っていた。胃の奥が冷たくなる感覚を今でも覚えている。
Excelが重い原因
まず、1万行を超えたあたりから、Excelの挙動は目に見えて怪しくなる。セルをコピーして別の場所に貼り付けるだけで。右下にあるステータスバーのパーセンテージがゆっくりと動き出す。他のウィンドウに切り替えようとするだけで画面が固まり。ブラウザで調べ物をすることすら許されない。気づけばファイルサイズは50MBを超え。開くだけでカップ麺ができるほどの時間を要求されるようになっていた。息を止めるような緊張感の中でExcelを操作する日々から抜け出すには。重くなる根本的な理由を知る必要がある。
Excel重化の構造的問題

パソコンのスペックが低いから重いのだと思い込みがちだ。もちろんメモリ不足の影響はあるが。最新のハイスペックPCを支給されても同じように固まるケースは後を絶たない。問題の核心は、人間が作ったExcelシートの構造そのものにある。巨大なファイルが重くなる原因は、大きく分けて3つに絞られる。
最大の原因は揮発性関数、いわゆるVOLATILE関数と呼ばれるものだ。TODAY関数やINDIRECT関数、OFFSET関数がこれに該当する。この関数は、シート内のどこか一箇所でもデータが変更されると。自分とは無関係のセルであっても常に再計算を実行してしまう。数万行のデータの中にこれらの関数が埋め込まれていると。数字を1つ打ち込むたびに数万回の計算が裏で走り続けることになる。
Excelを遅くする二つの落とし穴
次に、次に挙げられるのが条件付き書式の乱用だ。特定の文字が入ったらセルの色を赤くする、といった便利な機能である。だが、データのコピーと貼り付けを繰り返すうちに。本来1つで済むはずのルールが100個にも200個にも分裂増殖していく。見えないルールの残骸がファイルサイズを肥大化させ、メモリを食いつぶす。
ある日。前任者から引き継いだ「絶対に壊してはいけない」と念押しされた管理表を開いた。条件付き書式マネージャーを確認すると。適用先が「=$A$1」や「=$A$2」と細切れになった謎のルールが数百個も並んでいた。少しでも行を挿入しようものなら画面が数分間フリーズし、仕事が全く前に進まず。画面の前で頭を抱えた。
最後は外部参照だ。VLOOKUPなどで他のExcelファイルやネットワークドライブにあるブックを参照していると。ファイルを開くたびに通信が発生する。相手のファイルが移動していたり、名前が変わっていたりすると。Excelは迷子になったデータを探し続けて永遠に処理が終わらなくなるのです。
Excel高速化!応答なし解消の3ステップ

一方で、原因がわかれば、対処法はおのずと見えてくる。いますぐにでも「応答なし」の地獄から抜け出すための具体的な行動に移ろう。
真っ先に着手すべきは、INDIRECT関数やOFFSET関数の撲滅だ。これらの関数は動的に参照範囲を変えられるため便利だが。データ量が多いシートでは猛毒になる。INDEX関数とMATCH関数の組み合わせに書き換えるだけで。再計算の回数は劇的に減る。数式の構成を少し見直すだけで。これまで30秒かかっていた処理が数秒で終わるようになることも珍しくありません。
続いて、増殖した条件付き書式を一掃する。ホームタブから「条件付き書式」を開き、「ルールの管理」を選択する。ここを開いた瞬間にスクロールバーが極端に小さくなっていたら。ルールが異常増殖している証拠だ。必要なルールをメモした上で、一旦シート全体のルールを全削除する。その後、列全体を対象にして、たった1つのルールを適用し直す。これだけでファイルサイズが数MB単位で軽くなる。
ここで一度立ち止まって考えてみてください
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。
不要な参照と計算式の整理
そのため、他ファイルへの外部参照については。本当に常に最新のデータを参照し続ける必要があるのかを見極める。月次締めが終わったデータであれば。数式を「値として貼り付け」して計算式自体を消し去ってしまえばいい。計算の必要がないただの文字データになれば。Excelが裏で通信を試みることもなくなる。
Excel高速化の秘策

シートの構造を整理してもなお重い場合。Excelの隠された設定を変更することで劇的な改善が見込める。多くの人が見落としているのが、ファイルの保存形式です。
通常のExcelファイルは「.xlsx」という拡張子で保存されている。これを「Excelバイナリブック(.xlsb)」という形式で保存し直してみてほしい。名前を付けて保存する画面で、ファイルの種類をプルダウンから変更するだけだ。バイナリ形式はコンピュータが読み込みやすいデータ構造になっているため。ファイルを開くスピードも保存するスピードも格段に跳ね上がる。実際に50MBあった.xlsxファイルを.xlsb形式で保存し直すと。8〜12MB程度まで圧縮されることが多い。ファイルを開くまでの時間も体感で半分以下になり。保存のたびに固まっていた症状が嘘のように消えた。
手動計算設定:快適化と潜むリスク
しかし、計算方法の設定を「手動」に切り替えるのも有効な手段だ。「ファイル」から「オプション」を開き、「数式」の項目を選択する。計算方法を「自動」から「手動」に変更し。「保存前にブックを再計算する」のチェックを外す。こうすることで。データを入力するたびに発生していた裏側の処理が完全にストップする。計算させたい時だけキーボードの「F9」キーを押せば。そのタイミングで一斉に再計算が行われる。文字を入力する際の引っかかりがなくなり、ストレスなくタイピングできるようになる。
ただし、この設定には注意が必要だ。手動計算のままになっていることを忘れて数値を印刷し。古いデータのまま会議資料として提出してしまう事故が起きやすい。自分以外の人間も触るファイルであれば、安易に設定を変えるのは避けた方が無難です。
Excelの限界を超えるPythonデータ処理
パネル/python-excel-data-processing-flow.png
さらに、小手先の対策を重ねて寿命を延ばしても、データは日々増え続ける。10万行、50万行とデータが膨らんでいけば、いずれExcelの限界点に到達する。表示するだけで精一杯のソフトに。複雑な集計や加工を任せること自体が間違っているのです。
根本的な解決策は、重たいデータ処理をExcelから切り離すことだ。その最強のパートナーとなるのがPythonである。Pythonのデータ分析ライブラリであるpandasを使えば。Excelなら開くことすらできない数百万行のCSVファイルも。ほんの数秒で読み込むことができる。不要な列の削除、条件に合致するデータの抽出、VLOOKUPのような結合処理。これらすべてをPythonのプログラム上で終わらせてしまうのだ。Excelのマクロで10万行のVLOOKUP処理に5分以上かかっていたものが。pandasの。
merge()
重いExcel作業、Pythonで卒業
で10秒以内に完了する。計算速度の差は、それほどまでに圧倒的です。
まず、Excelの役割は「計算する場所」から「最終結果を見るための器」へと変わる。Pythonが裏側で重労働をこなし。集計が終わった純粋なデータだけをまっさらなExcelに書き出す。数式も条件付き書式も入っていない、ただの文字と数字だけのファイル。これならどれだけデータ量があっても。スクロールがカクつくことも保存時に固まることもありません。
毎日1時間かけて重いExcelと格闘し。何度も「応答なし」に怯えながら作っていた売上集計表。Pythonで処理するスクリプトを書いたところ、ダブルクリック一発。わずか5秒で完成済みのExcelファイルが出力されるようになった。「あの苦労は一体何だったんだ」という脱力感とともに。もう二度と重いExcelには戻れないと確信した。
Pythonと聞くとエンジニアの領域だと思われがちだが。データ処理のコード自体は驚くほど短い。決まった処理を書くだけなら。プログラミング言語というより強力なマクロツールに近い感覚で覚えられる。固まる画面を見つめながらため息をつく時間を。Pythonを学ぶ時間に投資してみるのも悪くない。その先には、何万行のデータが来ても全く動じない、圧倒的な心の平穏が待っている。
関連リンクとチェックリスト
著者はこうして解決の糸口を見つけた
著者も同じ境遇から始まりました。独学でここまで自動化した道のりを参考にしてみてください。
学習サービスとアンケート
このスキルを活かしてさらに前へ進むなら
Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

