セル間参照関係視覚化ツール

 プログラマやSEの経験がある人であれば、あるいは専門でなくてもツールとか作った事がある人であれば多少なりとも不満に思ったことがあるだろう。
「プログラムで何をやっているかは(バグも含めて)ソースに明記されているのに、なぜ懇切丁寧なドキュメントを別に作れと言われるのだ」。
 といいながらも「こんな処理を入れている理由を後でメンテする人はすぐにはわからないだろうから注記しておいてやるか」と気を回し、「そのためにはざっくりとした処理の流れを説明しておかないといけないな」とそこそこマメにドキュメントを書いているものだが。

 しかし、そのようにまじめにやっているからこそ、他の人に「もっとわかりやすく」などと言われると腹が立つ。「プログラミングの知識が多少なりともある人にならわかるように書いている。わかりにくいところは具体的に指摘してくれればちゃんと直すんだからわかろうとして読んでよ」。(なんでこんなにたくさん処理がいるんだ、と言われると「人が無意識にやっていることを書けばそうなるのよ」としか言えない。)
 そしてその不満は、他の人が作った「高機能の」Microsoft Excelワークブックに埋め込まれた計算式群をみた時にピークに達する。「このワークブックでやってること、ドキュメントあるの?」答えは大抵こうである「ない」。
 なぜ、これほどまでに読みにくいものに対してドキュメント作れと言わないのだろうか。ひょっとしてプログラムはわからなくても計算式ならわかる、という自信がおありなのでしょうか。

 セルに埋め込まれた関数は、そのままでは見えづらく、どことどこをどう計算しているのか負うのが大変で、参照先のセルがされあに別のセルを参照していたりすると非常に面倒で、VLOOKUPのように「お行儀の良いデータ」を前提としている関数をなだめるために IFERRORLEVEL を付け加えると作った本人でも怪しくなり、更になんかのはずみで(時々辻褄を合わせるために数字を直接入れちゃったりなんかして)計算式が崩れると、もう誰にもわからなくなるというのに。(不用意に行を一行挿入、とか。)
 せめて定期的に全部のセルをチェックして計算式が変わってないことを確認しないと。そのためにはチェックのためのドキュメントがいるでしょ。プログラム言語に比べて可読性が劣るから何をやろうとしているか書いておかないといけないよね。

 こういうものが野放しなのに、ロジックが一本の線で追えるプログラムはドキュメント必須、というのはどうしたって納得いかん。
 ちなみに今まで見たワークブックの中で一番多くの計算式を持つものは、外部参照だけで14万だった。担当に尋ねると
「たしかにそれくらいあるかもしれないね。」

 普段、そういうことを思っている人間に「今まで使っているワークブックがあってぇ、計算式がたくさんあるんだけどぉ、わかるぅ?」なんて相談を持ちかけられた。何が起こるかと期待してくれている人には悪いが、私はその程度では怒らない心の広い人。
 すなおにセルの計算式を追ってゆく。3セル遡ったあたりで挫折を決意した私は根性のない子。Ctrl+Shift+@で計算式一挙に表示。こりゃたまらん。
 ここで個人的な方針が決まった。「やりたいことを聞いて、全部VBAで組み直す」。

 しかしお客様のご要望を満たすために最大限の努力を惜しまないのが私の良いところ。
 とりあえず解析しようじゃないかとツール作成。
 裏でツール付きのブックを立ち上げた上で解析したいブックを表示、メニューからツール付きブックにあるマクロを起動する作り。

 シート状の使われている全セルから計算式のあるものを取り出して、別表に納める。
 更に計算式を分解して、参照しているセルをせっせと一覧表示。
 もとのワークシートをコピーしてきて、外部シートを参照しているセルはとりあえず赤で塗り、その他もともとからデータが入っているセル、計算式で参照しているけれどもそれ自体も計算式で別のセルを参照しているセル、エリアとして参照されているセルを色分け。
 ついでと言っては何だが、参照しているセルから元セルに矢印を引く機能も追加。実行しての感想は「ディスプレイの解像度テストに使えるかもしれないな」。
 一つの計算式が一つのセルを複数回参照している、といったものは縮約しているのだが、それでもやることは多い。しかし相手はコンピュータ。あとは任せたぞ。

 完成したツールでワークシートの参照関係がひと目で分かるように・・・なりませんでした。もちろん「ひと目」で見えはするが、分かりはしない。プログラムはわかろうと思えばいつかは分かるものだが、これは多分わからない。線が何千本引かれているのだろう。

 とりあえずユーザーさんに見せた。 「なんじゃこりゃー」。

 その一言がほしかったんです。そのためにこれを書いたんです。
「なので、これを解析して修正するのではなくて、やりたいことを教えてもらってマクロで組み直そうと思うのですがどうでしょう。」
一も二もなく、同意を得られた。

フリーソフト開発秘話、目次
ホーム