道具としてのExcel活用
重くなったExcelファイルを軽くする方法5選
エクセルファイルが「重く」なる原因
Excelは多くの企業に浸透しており、業務効率化のための最もポピュラーなツールといっても過言では無いでしょう。
そして、長い間使い続けているうちに、ファイルが肥大化して10MBを超えるようになり、開くだけでも数分かかるという状態になりがちです。
このように、エクセルのファイルが肥大化して、処理速度が低下することを「重くなる」と表現することが多いのですが、その「重くなる」原因は、主に以下の3つです。
- データ量が多すぎる
- 処理に時間がかかる関数が多すぎる
- 壊れた書式などのゴミ情報が多い
解決法1:バイナリ形式に変換する
ファイルが肥大化した結果、保存スペースに困るケースが少なくありません。
特に、モバイル環境では、限られたメモリ・ストレージを有効に活用したいところですが、肥大化したファイルを毎月コピーして使うような運用をしていると、すぐにGB(ギガバイト)単位のスペースを消費してしまいます。
そんなときは、保存形式を「バイナリ形式」と呼ばれるxlsbにするだけで、半分~1/4位に圧縮されます。
なお、文字情報や式が多い場合の圧縮効果は高いのですが、画像をやたら貼り付けている場合、ほとんど効果がない場合は、次以降を試して下さい。
解決法2:画像等のサイズを減らす
資料的に、画像を多用するケースもあるかと思います。
多くの場合、見た目の画像自体は小さくしているのですが、基の(オリジナルの)画像が大きいままなので、ファイルにしたときやメモリー内では基の画像サイズ分の領域を消費しています。なので、画像を圧縮してしまうのが効果的です。
画像を選択し、プロパティー→サイズ→拡大/縮小で縮小しておきます。その上で、再度画像を選択して「切り取り」→ ホームメニュー→貼付け→形式を指定して貼付け からGIF(色の再現性を重視するならPNG)を選択して貼付けると、基のサイズの1/10以下に圧縮できます。
解決法3:不要な行/列を削除する
「エクセルが重い」でお困りのお客様のファイルを見ると、多くのケースで使っていない列/行が数多く残されています。
例えば、社内システムから出力されたファイルをそのまま貼付けた結果、必要なのは数項目(列)にもかかわらず、50列以上使っている、とか、
当月分のデータがあれば十分なのに、当年度分全てのデータを貼付けている、・・・等です。
こうしたケースでは、使っていないところは予め除いておくか、今更変更できない場合は値をクリアしておくだけでも、処理速度が大きく改善されます。
解決法4:属性を減らす
属性とは、セルへの着色、罫線、文字の色などを指しています。
例えば、あるセルの下に罫線を引くと、内部的にはその罫線にIDを付与して「どのセルからどのセルに、何色のどんな罫線が引かれている」といった情報を保持しています。
まとまった範囲をコピペすると、内部的にはその属性情報もまるごと複写されています。
こうした処理に不要な属性情報が、以外とファイルサイズを圧迫しています。
ためしに、真新しいBookを作って、「数式のみ」貼付けると、それだけでファイルサイズが半分以下になることがあります。
このとき、単純にコピペしてしまうと、ゴミ情報(属性)も含めて移植されてしまうので、絶対に通常のコピペはしないようにして下さい(折角新しいBookに移植する意味がなくなります)。
解決法5(根本的な解決法):機能を複数ファイルに分散し、関数を減らす(無くす)
以上の解決策は、いずれも小手先のもので、当座の危機回避でしかありません。つまり、再び限界が来る日はいずれやってきます。
根本的に解決する場合は、目的に応じてファイルを分散することです。
例えば、毎月処理する売上のファイル、商品コードをもとに名称や原価を取得する台帳ファイル、複数のファイルの内容をマッチングするプログラムファイル・・・といった具合です。
全てを1Bookに納めて、シート相互に参照するしくみは、関数を使う以上宿命的なものですが、関数の中でもvlookupやsumifのような「データベース関数」と呼ばれる参照系の関数は、特に処理にCPUパワーが要求されることもあり、動作が遅くなりがちです。
その他、ファイルを分割すると外部参照となることから、事実上関数では処理できなくなるので、マクロ(VBA)を活用することになります。
一見敷居が高くなりそうですが、ファイルを分けることで「毎月変更すべき対象が明確になる」「設定変更する箇所が限定され、間違いが減らせる」「処理するロジックが正しい事が最初に保証されれば、以後検証が原理的に不要となる」「いつの間にか式が壊れて間違った結果を垂れ流す、といった事態を原理的に回避する」といったメリットが生じます。
また、不要な行/列を削除するといった「面倒な手作業」もプログラムが代行できるので、事実上ファイルサイズも気にせず、高速に処理ができ、人的ミスも原理的に無くせます。
当面の危機が去ったら、次の危機が顕在化する前に、根本的な対応方法を検討しておくことをお勧めします。
データを分離できるなら、データベースシステム化が確実
データ部が関数などのロジック部と独立したシートにあるようなケースでは、まずデータ部を外部に切り離すのが(量も多いでしょうから)一番効果がありそうです。
その際、数千行レベルであれば別のExcelファイルに分離すれば十分軽くなりますが、それこそ10万件を超えるような場合は、データベースにデータを移した方が確実です。データベースといっても、Accessに移してお茶を濁すのでは無く、SQL Serverなどのデータベースサーバを使う方が効果が劇的に現れます。 ※そもそも最近のAccessファイルは、Excelに接続できなくなっています
最近はクラウド型のデータベース(AzureやAWSなど)が普及しているので、初期投資無しでお手軽に使える様になっています。当社で作る場合、こうしたデータベース機能を活用して、式や関数に相当するロジック部分も、データベース側に移すことが多いです。
興味がありましたら、こちらの解説ページをご参照下さい。
この他、実例はこちらでご紹介しています。
当社がお手伝いできること
色々と試みて、いよいよ手に負えなくなった場合、軽量化や機能拡張も含めた再構築をお手伝いしています。誰が作ったかわからないような、古いExcelファイルの対応や引継ぎ支援も行っています。
詳しくは、こちらをご参照下さい。