道具としてのExcel活用

重くなったExcelファイルを軽くする方法5選

なぜエクセルファイルは「重く」なるか

Excelは多くの企業に浸透しており、業務効率化のための最もポピュラーなツールといっても過言では無いでしょう。

そして、長い間使い続けているうちに、ファイルが肥大化して10MBを超えるようになり、開くだけでも数分かかるという状態になりがちです。

このように、エクセルのファイルが肥大化して、処理速度が低下することを「重くなる」と表現することが多いのですが、その「重くなる」原因は、主に以下の3つです。

  • データ量が多すぎる
  • 処理に時間がかかる関数が多すぎる
  • 壊れた書式などのゴミ情報が多い

 

解決法1:バイナリ形式に変換する

ファイルが肥大化した結果、保存スペースに困るケースが少なくありません。

特に、モバイル環境では、限られたメモリ・ストレージを有効に活用したいところですが、肥大化したファイルを毎月コピーして使うような運用をしていると、すぐにGB(ギガバイト)単位のスペースを消費してしまいます。

そんなときは、保存形式を「バイナリ形式」と呼ばれるxlsbにするだけで、半分~1/4位に圧縮されます。

なお、文字情報や式が多い場合の圧縮効果は高いのですが、画像をやたら貼り付けている場合、ほとんど効果がない場合は、次以降を試して下さい。

 

解決法2:画像等のサイズを減らす

資料的に、画像を多用するケースもあるかと思います。

多くの場合、見た目の画像自体は小さくしているのですが、基の(オリジナルの)画像が大きいままなので、ファイルにしたときやメモリー内では基の画像サイズ分の領域を消費しています。なので、画像を圧縮してしまうのが効果的です。

画像を選択し、プロパティー→サイズ→拡大/縮小で縮小しておきます。その上で、再度画像を選択して「切り取り」→ ホームメニュー→貼付け→形式を指定して貼付け からGIF(色の再現性を重視するならPNG)を選択して貼付けると、基のサイズの1/10以下に圧縮できます。

 

解決法3:不要な行/列を削除する

「エクセルが重い」でお困りのお客様のファイルを見ると、多くのケースで使っていない列/行が数多く残されています。

例えば、社内システムから出力されたファイルをそのまま貼付けた結果、必要なのは数項目(列)にもかかわらず、50列以上使っている、とか、

当月分のデータがあれば十分なのに、当年度分全てのデータを貼付けている、・・・等です。

こうしたケースでは、使っていないところは予め除いておくか、今更変更できない場合は値をクリアしておくだけでも、処理速度が大きく改善されます。

 

解決法4:属性を減らす

属性とは、セルへの着色、罫線、文字の色などを指しています。

例えば、あるセルの下に罫線を引くと、内部的にはその罫線にIDを付与して「どのセルからどのセルに、何色のどんな罫線が引かれている」といった情報を保持しています。

まとまった範囲をコピペすると、内部的にはその属性情報もまるごと複写されています。

こうした処理に不要な属性情報が、以外とファイルサイズを圧迫しています。

ためしに、真新しいBookを作って、「数式のみ」貼付けると、それだけでファイルサイズが半分以下になることがあります。

このとき、単純にコピペしてしまうと、ゴミ情報(属性)も含めて移植されてしまうので、絶対に通常のコピペはしないようにして下さい(折角新しいBookに移植する意味がなくなります)。

 

根本的な解決法:機能を複数ファイルに分散し、関数を減らす(無くす)

以上の解決策は、いずれも小手先のもので、当座の危機回避でしかありません。つまり、再び限界が来る日はいずれやってきます。

根本的に解決する場合は、目的に応じてファイルを分散することです。

例えば、毎月処理する売上のファイル、商品コードをもとに名称や原価を取得する台帳ファイル、複数のファイルの内容をマッチングするプログラムファイル・・・といった具合です。

全てを1Bookに納めて、シート相互に参照するしくみは、関数を使う以上宿命的なものですが、関数の中でもvlookupやsumifのような「データベース関数」と呼ばれる参照系の関数は、特に処理にCPUパワーが要求されることもあり、動作が遅くなりがちです。

その他、ファイルを分割すると外部参照となることから、事実上関数では処理できなくなるので、マクロ(VBA)を活用することになります。

一見敷居が高くなりそうですが、ファイルを分けることで「毎月変更すべき対象が明確になる」「設定変更する箇所が限定され、間違いが減らせる」「処理するロジックが正しい事が最初に保証されれば、以後検証が原理的に不要となる」「いつの間にか式が壊れて間違った結果を垂れ流す、といった事態を原理的に回避する」といったメリットが生じます。

また、不要な行/列を削除するといった「面倒な手作業」もプログラムが代行できるので、事実上ファイルサイズも気にせず、高速に処理ができ、人的ミスも原理的に無くせます。

当面の危機が去ったら、次の危機が顕在化する前に、根本的な対応方法を検討しておくことをお勧めします。

 

データを分離できるなら、データベースシステム化が確実

データ部が関数などのロジック部と独立したシートにあるようなケースでは、まずデータ部を外部に切り離すのが(量も多いでしょうから)一番効果がありそうです。

その際、数千行レベルであれば別のExcelファイルに分離すれば十分軽くなりますが、それこそ10万件を超えるような場合は、データベースにデータを移した方が確実です。データベースといっても、Accessに移してお茶を濁すのでは無く、SQL Serverなどのデータベースサーバを使う方が効果が劇的に現れます。

最近はクラウド型のデータベース(Azureなど)が普及しているので、初期投資無しでお手軽に使える様になっています。当社で作る場合、こうしたデータベース機能を活用して、式や関数に相当するロジック部分も、データベース側に移すことが多いです。

興味がありましたら、こちらの解説ページをご参照下さい。

この他、実例はこちらでご紹介しています。

 

修復のお手伝いをします

色々と試みて、いよいよ手に負えなくなった場合、軽量化や機能拡張も含めた再構築をお手伝いしています。

詳しくは、こちらをご参照下さい。