自らExcelのソフトを多数作って公開している私が、このような記事を書くのを疑問に思われる方もいるかも知れない。私は長年に渡りExcelVBA、AccessVBAを使って来たが、Excelは確かに素晴らしいアプリケーションだと今でも思っている。今回はそんな私だからこそ感じている「Excelの功罪」について書いてみたい。
Excelは誰にでも使える便利なツールである。色々な帳票を手軽に作ることが出来る。言わば「間口の広い」ツールだと言える。それでいて奥が深いツールでもある。VBAという開発言語が搭載されているため、かなり本格的なアプリケーションを作ることも可能である。Accessには敵わないが、データベースを作成することも出来る。
こんなに便利なツールであるのに、いや「だからこそ」Excelは同時に「危ういツール」でもあるのだ。セルに関数を入れるだけでシート間、いやブック間であってもリンクが出来たり「参照」が可能だ。VlookUp,If,Countなどの関数機能だけで相当なものが作れるし、それにハマるとExcelが面白くなる。だがそうやって作られたExcelのワークシートは簡単に変更されうる。シートに保護を掛ける機能があるにはあるが、普通はそのまま使われることが多いだろう。かくて前任者から後任者へと引き継がれる度に内容が改変され、あるいは機能が付け加えられていく。そしてある日気がついたときには、当初思いもよらなかった不具合が現れることになる。
ワークシート上に書き込んだ「計算式」は容易に壊れる。列や行を追加・削除するとリンクが崩れてしまうこともしょっちゅう起こる。尤もExcelはこのような場合にリンクを「自動補正」出来る機能をも兼ね備えている。それでもうっかりシート関数を消してしまったり変更を忘れてしまうことがある。マクロについても同じことが言える。シートのデザインを変えてしまうと最初に書いたマクロがとんでもない動作をする、といった経験を読者諸氏もご経験があるのではないかと思う。マクロの経験を積んでいくとそのうちに対処を覚えるようになる。例えばマクロによるシートの保護だ。シートを変更する前に一度保護を解除して、入力が終わったと同時に再度シートを保護する。たったこれだけのマクロでExcelユーザーは一段上のグレードとなるのだ。このひと手間を掛けなかったために、人から人へ引く継がれる度に「改変」が行われて上記のようなバグの発生となる。
そのようなことがないように拙作「顧客管理名簿」などは、シートの改変があらかじめ出来ないように作られている。
例えば「顧客管理名簿」では、各シートが「保護」されているのみならず、リボンが常に「非表示」になるように作られている。ユーザーの中には、このことにクレームをくれる方がたまにいらっしゃる。「データを入力したいのだが、シートに保護が掛かっていて変更ができない」というクレームである。このソフトの場合、入力・変更・削除はユーザーフォームから行なうことになっているが、一般ユーザーにとっては、Excelは常に自由に「カスタマイズ」が出来るもの、という刷り込みがあるのも事実だ。
先日Excelで自分で作った帳票をAccessレポートにしたいという相談を、あるユーザーの方から頂いた。その帳票を見て驚いた。手入力の箇所ばかりなのだ。もっともExcelなのだから当たり前といえば当たり前だ。Excelのシートであれば手入力がいくらでも可能なのだから。一方Accessレポートではその一つ一つを全てテーブルに「フィールド」として持たせなければならない。入力にはフォームを使い、コンボボックスなどの入力支援が必要になってくる。当然マスター登録のためのテーブルやフォーム、クエリ等も必要になって来るし、結果その一つ一つが工数として掛かって来る。Excelユーザーにはそこが理解出来ない。