Excelで作ったツールを業務運用にのせる場合に考えておくべきこと

いつもと少し毛色の違った話題。

システム屋をやっていると、Excelに数式やVBAマクロを埋め込んだツールを作り込むことがよくあります。自分やチーム用の便利ツールとして作るときもあれば、構築したシステムの補助輪的役割をもつものであったり、逆に業務の主役級の役割をもつものとして作ることもありますね。
ツールの作りの複雑さも様々で、業務における主流か傍流かと、そのツールが複雑か単純かには相関関係がなかったりします。

そのような、我々にとって身近なExcelツールですが、実装する立場の人にはお判りの通り、開発ツールとしてはいろいろな制約なりやりにくさがあるものです。そういうやりにくさをどう解消したらいいのか、技術的な側面から検討を進めている人たちがいます。

しかしながら一方、技術をこねるよりも手前の段階で考えておかなければならないことって、たくさんあるよなあ、というのが今回のお話です。



Excelツールを業務運用にのせるにあたり、次のようなことをどうクリアするのか、が問題になってくると思ってます。

  1. Excelバージョン違いをどのように吸収するか
  2. VBA開発時、共通モジュールをどうやって本当に共通のものとするか
  3. 改修バージョンを実運用環境にリリースするときに発生する諸問題
  4. 実運用環境のセキュリティ的縛りに対する対応
  5. ユーザによる改変への対応

これらを考慮に入れた上で、あえてExcelを選ぶのどうなの、選ぶならどう作るの、ということです。

順にコメントします。

1. Excelバージョン違いをどのように吸収するか

これへの解の1つはバージョンを固定してしまうことだと思いますが、未来永劫そのバージョンを使えるとは限らないので、結局いつか困る。そもそも、Excel本体がある程度の下位互換性に対応してしまっている以上、細かいところで困る局面は多々あります。
Excel本体だけでなく、参照設定してる外側のバージョン違いでも困ります。

2. VBA開発時、共通モジュールをどうやって本当に共通のものとするか

ちょっとわかりづらいかもしれませんが、よくある話として、Common.bas みたいなモジュールを作って共通モジュールをそこに突っ込む的なことをしたり、環境ごとの差異を、Config設定用シートを用意して実装外から与えるようにすることが多いわけですが、同時に二人以上で開発しようと思ったら結構破綻しがちですよね、という話です。
ファイル単位でしかバージョン管理ができない件も根っこは同じかと。

3. 改修バージョンを実運用環境にリリースするときに発生する諸問題

実行環境にリリースする際に、Excelファイルごと上書きが可能な仕組みにしておかないと、絶対に成り立たない。
前述のConfig用のシートを持つとか、実行履歴や処理結果を同一ブックの別シートに持っちゃう、などしてしまうと破綻します。

4. 実運用環境のセキュリティ的縛りに対する対応

一例をあげると、実行環境がマクロ有効ブックをNGにしている場合とか(時々「マクロ警告すら出させたくない」とか言う人がいたりして(論外?))。また、データ可視権限の問題とか。
そんなのに対応するくらいならAccessで作ろうず、などの話になります。

5. ユーザによる改変への対応

故意のものとうっかり系のものとがあります。故意のものは、ユーザが詳しい人で、自分用に数式を埋め込んだりするケース。うっかり系のものは、消してほしくないセルの数式を消してしまうとか、行挿入されてしまうと困るようなコーディングになっているとかです。
これは、セルの保護とかで丁寧に実装してあげればある程度は防げますが、工数軽くしたいからExcelにしよう的なところから出発してるときは、確実にボディーにくる。



ごちゃごちゃ書きましたが、Excelを【フロントエンド】としたいならば、

  • xlsmファイルを、いつなんどき、まるごと上書きされようが、平気な作りにする
  • 使う人がExcelに精通してない(逆にね!)
  • もしくは、これらの「困る」を「別に困りませんけど?」に意識転換できるポジティブ思考

といったところを満たさない限り、選んではいけない、ぐらいのところまで思っています。
直接的には1点めが最重要ポイントですが、それをクリアするだけでも、改修版リリース時に面倒が発生する、もしくは、その面倒さを吸収するための仕組みを何らかの方法で作り込む、などという悩ましい状態になりがちで、となると、逆に3が真の最重要ポイントになります。3が満たされりゃ1を考える必要ないんで:#)
実は【フロントエンド】にするのが目的じゃなかったんじゃない?出力閲覧系だけExcelになってればよかったんじゃない?という真の目的の検討にもつながるのかなーと思います。


実は、こういう検討をすれば解決・・・ではありません。これらをちゃんと考慮して運用にのせた後にも問題は横たわっています。

次回へつづく!