名前のないツールフリーソフト開発秘話、目次へ
なぜ作ったか?
頼まれたからである。似たようなものは今までもたくさん作ってきた。
古くはIPアドレスその他の衝突がないようチェックするための資料として、設定シートの例えばコンピュータ名、IPアドレスといった情報を一覧表にするため。
あるいはアンケート結果を集計するため。
一つのフォルダに集めたワークブックを一個ずつ開いて、該当部分のセルの値を抜きだし、別のワークシートに1ブック(シート)=1レコードで書き込んでゆく。まあ、そういう仕事はそんなにたくさんあるわけじゃないし、個別に作ってもパターンがあるのでそんなに大したものでもないので、例えばDIRコマンドでファイル一覧を取って対象に絞り、それをもとに、といったことをしてきたわけである。
ところが、そういう作業をいろんなパターンで、恒常的にする羽目になった人がいるらしい。
たしかに処理するワークブックが数枚ならいいが、増えてくると、さらに継続的に似たようなことが起こるようになると、作業自身、ストレスがたまるものであることは間違いない。というわけで作ってみた。もっとも、分かりきったことだがプログラムを汎用的なものにしようとすると大変だ。
まず、どのセルを集計対象とするか、の指定である。
定数を含めてソースに打ちこむことも珍しくはないし、古くはiniファイルなんてのも利用していたのだが
「使いこなしがむずかしい」らしい。
まあ、確かにiniファイルでエントリーを作ってというのは敷居が高いかもなあ。なので考えた。集計対象とするワークシートはフォーマットが固まっているはずである。
ならば、そのフォーマットをマクロのあるワークシートにテンプレートとして挟み込んでもらえばよい。
んでもって「この色に塗ったセルを集計してね」とするのだ。色はmainのワークシートの所定セルに同じ色を塗っておいてもらう、こととする。色合いの違いや名称の違いがあっても、これなら間違うことはあるまい。さて、フォルダをダイアログボックスで指定してやると、そのフォルダの中にあるMS-Excelファイルを次々に読み込みます。ところがそれは「ブック」であって「シート」ではない。はて、どのシートを読めばよいのだろうか。これが「都度作成」なら、「シートは1枚に決まってます」とか「シート名は固定です」などと予めわかるのだが。
というわけで、集計対象のシートかどうか、を判別するロジックを入れた。これも「文言が変わらないところ」をまた別の色で塗っておくと、テンプレートと同じ文言のものを探す、とそういうものだ。ただし一致するものが複数あるかもしれない。とりあえず一番最初に見つかったものを優先。多分、そこを記入してセーブしているから、一番最初に開くだろうということだ。
何がめんどくさいかというと「結合セル」である。結合セルで値が入っているのは一番左上だけだ。でも「色」は結合されたすべてのセルについている。そこでセルを一個一個チェックする中で、このセルは結合されているか?結合されていたとしたら一番左上か?をチェックするロジックを入れた。
かくしてフォルダの中のMS-Excelワークシートを読み込み、1つずつ開いて該当シート名を確認、をやった。しかし、ワークシートの拡張子、xlsとxlsxが混在しているのね。Dir(*.xls*)でやろうとしたらワイルドカードを使うと、ショートカットがヒットしてしまうのか。しかたない、FileSystemObjectでファイルのタイプを見るか。あれ、ファイルはあくまで「ブック」なのに「ワークシート」って返ってくるのね。担当者の「てへっ」顔が見えるようだ。
オープンしたファイルをクローズしようとするとエクスプローラーの設定によってはエラーになるのか。仕様変更の影響調査がなされてないとこんな弊害が出る。プログラマ間のコミュニケーションの問題とするのは気の毒だ。マイクロソフトがOFFICE SUITEのアップデートの際「変更はほとんどありません」というのは、面倒で書かないのではなく、会社自体も影響が分からないのだと実感できた。それはもういいから値段をOffice95並みに下げなさい。今回は他人の注文なので、処理速度やエレガントさを犠牲にして、読みやすいコードにした。(OSが予想外の反応をしたときも、おかげで原因がつかみやすかった。)さて、評判はどうだろう。
作り終わったところで、別件に気が付いた。そうだボランティア申込み今日までだった。えっと申し込みのワークシートを書いて・・・ん?こんなふうに単票がたくさん来るのだよな。これを先方が集計するとき、今作ったツール使うと、ものすごく効率的ではないかい。なんか残念。