村中 直樹 氏
クレッシェンド 代表取締役

 これまで400以上のExcelシステムに関わってきた経験を踏まえ、保守できない「Excelレガシー」の発生原因と対策をお伝えしていきたい。今回は、Excelで構築した「売上予実管理システム」において、機能拡張をした際にExcelマクロにミスが紛れ込んだ問題と、その対策を取り上げる。

 Excelは、他の言語と比べアプリケーションの開発生産性が非常に高い。簡単なアプリケーションであれば5分もあれば開発できてしまう。だからといって、ミッション・クリティカルな業務で利用するアプリケーションまで短時間で作れると考えるのは早計だ。Excelであろうと他の言語であろうと、一定の品質を保つ対策を講じなければバグは簡単に紛れ込む。

売上予実管理システムを構築

 レクリエーション施設の運営サービスを提供しているD社は、売上高や契約数といった店舗ごとの営業数値を集計して予算の達成度を出し、毎月開催する経営会議で議論している。店舗の担当者は毎月、営業数値を紙の用紙に手書きし、その用紙を本部に郵送する。本部の担当者は、店舗の数だけ届く用紙を基に集計処理をする。記入する項目が多岐にわたるため、店舗担当者の負担が重かった上に、本部で集計する際に転記ミスが頻発する問題も抱えていた。

 事態を重く見た役員の1人は、電算室にシステム化を指示した。当時、電算室に所属していた担当者が、Excelを使って売上予実管理システムを構築した。Excelのシートで記入票を作成し、店舗の担当者がデータを入力する。そのファイルをメールで本部に送る仕組みである。各店舗のExcelファイルを集計処理するシステムもExcelマクロ(VBA)で開発した。Excelシステムを利用し始めてからは、手書きの作業がなくなったことで店舗担当者の負担が大幅に軽減。集計処理をExcelマクロで自動化したことにより本部でのミスもなくなった。

対前年比の売上高があり得ない数値に

 Excelシステムの利活用が進むうちに、経営陣からさまざまな改善要望が出てくるようになった。「対前年比だけでなく、過去3年間のデータの推移が見たい」「新規契約数だけでなく、解約数も見たい」「過去3年間と言わず5年間のデータの推移が見たい」などだ。

 しかし、Excelシステムを開発した担当者は、運用開始後に異動していた。2代目の担当者は特にExcelに詳しいわけではなく、前任者が異動する際にシステムの内部構造について簡単なレクチャーしか受けていなかった。その後、経営陣から改善要望が出るたびに、場当たり的に内部構造を分析して改修する作業が続いた。経営会議を数日後に控えたタイミングで改善要望が出ることも多々あり、開発とテストにかけられる時間は平均2~3日だった。その後、この2代目の担当者も異動になり、Excelシステムは3代目の担当者に口頭で引き継がれた。

 事件は突然起きた。役員の一人が営業数値を記した資料を眺めていたとき、対前年度比で絶対あり得ない数値を見つけたのだ。役員は、数値の根拠を電算室に問い合わせた。3代目の担当者が調査したところ、Excelマクロにロジックのミスが見つかった。過去の売上と比較する期間を3年分から5年分に変更する際、Excelシートに列を挿入したが、Excelマクロのロジックの変更に漏れがあったのだ。さらに調査した結果、このほかにも細かいロジックのミスが見つかった。D社は、この問題が発覚するまでの間、誤った営業数値を基に経営会議で意志決定をしていたことになる。

システムが構造化されていないことが原因

 今回の問題の原因は、機能追加を場当たり的に実施した結果、システムの構造に統一性がなくなり、ある機能が別の機能に影響しやすい構造になっていたことにある。Excelが詳しくない後任の担当者が、片手間でExcelシステムを保守開発していたことも問題であった。経営陣から改善要望が突然出るため、開発やテストに時間をかけられない点も間接的な要因といえよう。

保守開発しやすい構造を保つ5つのルール

 限られた時間で開発やテストを効率よく行うには、Excelシステム自体を保守開発しやすい構造に保っておくことが重要となる。D社が直面した問題は、以下の5点に注意すれば防ぐことができる。5点とはマクロに関するものが3点、シートに関するものが2点である。

 Excelマクロに関するルールは3つある。

●1つのExcelマクロ中に、同一のロジックを繰り返し記述しない。「マクロの自動記録」機能を使ってExcelシステムを開発すると、同じロジックが繰り返し記述されるケースがあるので注意したい

●何の処理を実行しているのか後から見て分かるように、各機能ごとにExcelマクロ(VBAコード)の脇にコメントを記述しておく

●VBAコードを修正した際には、コメントの脇に日付も記述しておく。後日、同様の修正を施す際に、同じ日付のコメントを検索すれば手を入れるべきコードが分かる

 Excelシートについても以下の2つのルールを守る。

●「データを入力する列」「計算用の関数を格納する列」「コメントを記入する列」など、行や列の単位で役割を分ける

●列や行(または表)ごとにタイトルを付けておき、何を入力する(表示する)列や行なのかが一目で分かるようにしておく。Excelの「コメント機能」で概要を記述してもよい

 これら5つのルールを守ることにより保守開発しやすいExcelシステムになるはずである。

 本来、経営陣の意志決定に利用するような重要なシステムは、突貫工事で作ったり、たいしたテストもせずに運用を開始したりしてはいけない。たとえ軽微な機能追加でも、ロジックに間違いがないか確認する作業を含め、最低でも1週間程度は時間をかけたい。Excelで開発したシステムであっても、基幹システム並みの運用保守体制が必要である旨を経営陣に説明することも重要だ。

村中 直樹 氏(クレッシェンド 代表取締役)
 金融機関の情報システム部門等でシステム開発に従事。約20年前にExcelと出会って以来、その機能と利便性に惚れ込み、日常の仕事にExcelを活用。2000年に独立してExcel専門の受託開発会社クレッシェンドを設立、今に至る。