課題解決 事例紹介

巨大なExcelファイルのダイエット
~ 秘伝のタレのレガシーファイルを30分の1に圧縮 ~

背景 秘伝のタレとなったExcelファイル、消していいかどうかの判断ができずに、気がつけば10MB超え。
開くだけで20分以上かかる。
方針 ・"とりあえず定義"している式を削除する
・自動再計算をオフにする(但し、戻すタイミングを忘れずに)
・罫線やセル着色を極力やめる(以外とメモリを食う)
・今の構造にこだわらず、入口~出口以内を再検討する
・拡張子を、xlsからxlsx、xlsbに変えてみる(起動が速くなる or ファイルが圧縮される)
効果 ・ファイルサイズが1/5以下になる(本ケースでは、1/25)
・体感速度が向上(5倍以上)

50MB以上に肥大化したExcelファイル、保存するのに20分

なぜこんなに肥大化するか?

L社の業界では、全ての請求・支払い要素が棚卸しできてから、同時に請求と支払いを出すことになっています。

このため、1契約当たりの管理期間が1年以上におよび、常におびただしい数の案件を管理し、収支として記録し続ける必要があります。

しかも、ごく一部とはいえ、こうした締め切りを過ぎてもなお「請求漏れ」「計上漏れ」が発生するので、締めたからといって消してしまうわけにはいきません。

そんな事情もあって、過去の取引履歴は全件持たせて管理していますが、20年近く改良しながら使っていることもあり、ファイルが極端に重くなっています。ファイルサイズは、56MBもありました。

更に、少しでも計算が速くなるようにとvlookupの参照先は同一Book内に入れているのですが、こうした参照先が増えるにつれて再計算対象が増えてしまい、保存するだけでも(再計算のために)20分以上かかるようになってしまいました。

 

「不要データは削ればよい」という正論が通用しない事情

誰が見ても、古いデータは削除すれば良さそうなものですが、

  • 同様のデータでも時期により異なるシートに格納されている
  • 不要行を削除しようにも、いつもメモリ不足でExcelが突然死する
  • 社内にExcel関数が使える人が居なくなってしまった
  • 一度部分的に削除してみたが、思いがけない箇所にある関数が壊れてしまった
  • 半年ほど前に、社内の業務改革活動の成果物として、手順書が作られた。今更変えられない。

・・・といった事情があり、現在では誰も怖くて触れなくなってしまったのです。

 

いよいよ、スリム化手術

まずはデータの流れの確認

関数主体のExcelファイルの特徴として、どこが処理の起点かが式だけでは分からない点が挙げられます。

すなわち、あるセルに値を入れると、様々な式が自動計算で更新されますが、「ある式が別の式を参照する」関係が多重化されていても、順番を間違えずに計算してくれます(設定を誤ると、循環参照になりますが)。

不要箇所を切り離すということは、不要でない箇所を割り出す事と同義であり、園のためにも入口と出口を確認する必要があります。

L社のファイルでは、収支を登録するシートが1つずつと、後は取引先情報を取得するためのシートがあれば表現できそうです。

一方で、古くからあるデータ(8万行!)は現在の処理では一切参照する必要がないにも拘わらず参照対象となっていたことから、余計に再計算の時間を要していました。

これは、過去2年分を残して全て排除し、使うデータのみを1シートに統合したほうが、後々のメンテも楽になりそうです。

 

作業の度に、20分待ち

方針が決まったのは良かったものの、何かセルを更新/削除等するたびに、再計算で20分ほど待たされてしまいます。

さしあたって改造するにあたっては、正しい数字が表示されている必要もないので、Excelのオプション→数式→計算方法の設定、から「手動」を選択し、自動で再計算されないようにしておきます。

それでも、保存には数分かかります。

Excel関数の再計算を止める

 

変えて良い処と行けない処の識別

今のしくみは、時間がかかる以外にも、外回りの社員が自分のノートパソコンでデータを登録し、後でコピペする運用を容認しています。

このため、入口にあたるシートについては、レイアウトを変えてしまうと、ほぼ全社員の手持ちのファイルに影響が出てしまいます。社員数が少なければ、個別に修正して回ってもよいのですが、外回りが多くてなかなか捕まらないこともあって、列は現状維持の方針としました。

一方、最終的には会計データとして会計ソフトに繋がればよいので、これに併せたデータ出力ができれば良いだけです。

つまり、その中間の処理については、何ら制約がありません。

従って、入口→出口に至る部分については、マクロ(VBA)と組み合わせて処理をすることで、予め式を定義しておく必要もなくなり、従来80,000行以上もあったデータ件数が、わずか300行にまで落とせたのです(不足したら、マクロで自動的に補填します)。

ファイルサイズも、最終的に2.3MB以下になり、再計算の間の無駄な待ち時間は0になりました。