TDC昆布for Ver0.15

 まつもとかなめさん作の「ガントチャート風日程表示つき階層型ToDoリスト」であるToDo Chartのデータを印刷するためにMS-Excelにコンバートするマクロ「TDC昆布」は「メールくれたら個別に送ります」というあまり聞かない公開法をとりました。メールをくれたのは現在54人。あまりにも失礼な1本を除いて全員に発送しております。
 そうこうしている間にToDo Chartはver0.15にリリースアップ。これがまたセンスがよい。機能が少ないように見えるが「天網恢々疎にして漏らさず」(ここまでいうとちょっとほめすぎ)。サポートされているはずの機能なのに「○○という制限があります」というものがない(悲しいことに休日出勤もサポートされている)。ちなみにこの手の制限で印象に残っているのは、MS-Accessで30日の5日後を求めると35日になります、というのと、Lotus IMPROVでLotus1-2-3のデータは読み込めますがA列は無視されますというの。(おい、パッケージあける前に分かるようにしておけよ。こういうことをやる以上、パッケージに書いてある機能を持っているとユーザーが判断できるまでの間くらいはどっかでコピーさせてもらったモジュールを使われたとしても大目に見るくらいの度量は必要だろう。)

 ならばTDC昆布側もキャッチアップが必要だなあ、というプレッシャーにさいなまされて修正を開始。本家ToDo Chartのリリースアップ後もTDC昆布個別公開依頼は送られてくるし、ユーザーリストは無言ながらキャッチアップを期待しているだろうし。
 でも年度末の三ヶ月、というこちらの事情もあり多少の猶予はもらって(まつもとかなめさんの掲示板に書いたのよ)、、、でも大変。くれぐれも言っておくが私はこれ以外VBAの経験はない。特にiniファイルを読み込むなどという技は知りません。

 いや正確に言うと1度だけVBAを使ったことがあるのだ。ただしそのときは行の高さをそろえてゆくのが大変だったので、操作を記録してループで適当な回数回しただけだから実質的に経験なし、といっても嘘にはなるまい。

 そんなわけで例によってよく分からないことを調べながらTDC昆布を修正していった。
 今回調べたことは次の通り

 今回分かったことは例によって  プログラム仕様は、要するにオリジナルのToDo Chartにあわせるというだけなのだが、内部仕様を決める段でやはり問題となることがある。例えば今回はToDo Chartのiniファイルおよび休日設定のファイルを読み込む必要が生じた。(iniファイルに何曜日を休みにするか、休日設定のファイルに何日を休みにするか〜あるいは休みの曜日でも労働するかが記入されている。)
 従って、iniファイルと休日設定ファイルのどちらを(あるいは両方を)ユーザーに指定させるか、またiniファイルと休日設定ファイルのどちらを先に読み込ませるかというのが問題となる。

 解決が簡単なのは読込順序である。休日設定ファイルに設定できる休日の日数は事実上無制限。これに対してiniファイルに書き込まれる休日となる曜日は7日分。通常であればiniファイルが先、となるのであるがVBAに限り逆になる。
 VBAではファイルを一行ずつ読み込んでゆく、という動作よりもファイル一つを丸ごとMS-Excel表に読み込む方がずっと簡単にできるのだ。iniファイルは(APIを呼び出して)1行ずつ読み込むしかないが、休日設定ファイルは丸ごとMS-Excel表に読み込むことができる。かくして「休日設定ファイルをごそっとワークシートに読み込んでから、iniファイルの必要部分をちまちま読んで追加してゆく」という仕様に決定した。しかし後からのプログラミング(正確にはコーディングないし実装)を簡単にすべく、読み方を工夫した。休日設定ファイルを読み込んだ後、上に空白行を追加して、そちらにiniファイルから読み込んだ曜日ごとの休日設定を書き込んでいったのだ。こうすると何行目に何曜日の休日設定が入るかキメ打ちできる。リテラル定数を使うことになるが、一週間の日数は当面変わりそうもないので別にかまうまい。(月月火水木金金でも一週間が7日であることには変わりなかった。ロシアの10曜日制というのはあったが。)

 指定順序はやや悩む。まずどちらか一方しか指定させないことはすぐに決定。休日設定ファイルとiniファイルは同じディレクトリにあるので、一方を指定すればもう一方は演算で割り出せるから。ではどちらを指定させるか。当方は休日設定ファイルを指定させたが、iniファイルでも正解かもしれない。
 休日設定ファイルを指定させたときのメリットは「Ver0.15でないと休日設定ファイルが存在しないので、Ver0.15以降でしか使われないということが保証されること」こと。プログラミングはこの方が格段に楽になる。ただしプログラミングの都合を優先するというのはユーザーの自由を奪わない限りにおいて許されることであるから、それを検証する必要がある。具体的にはVer0.04のままバージョンアップしないほうがユーザーの利益になる場合があるかどうかである。
 まずバージョンアップのコストだが、プログラム自体はフリーソフトなのでゼロ。データファイルも共通でコンバートは不要。したがってコストはダウンロードと解凍およびプログラムファイルのコピーだけ。この手間を惜しむ人は少なくとも私に「出力フォーマットを変えてくれという要望には応じませんという条件を了解したから、TDC昆布を送ってください」というメールを送ってはよこさないだろう。したがってバージョンアップのコストは無視できる。
 新バージョンの方が安定が悪いので旧バージョンを使い続けるという人がいる場合もある(MS-WindowsMeは安定が悪いので98を使い続けるとか)。ところがToDo Chartはどちらのバージョンも極めて安定しているのでこれも問題にならない。
 問題があるとすればここ、Ver0.15の方がVer0.04よりも重い。起動やフォルダの展開にかかる時間の差が無視できない。すこーし悩んだが、なんてことはない。MS-Excel上でTDC昆布を走らせるのに比べると全然速い。TDC昆布を使う人間がToDo ChartのVer0.15が重いのでVer0.04を使い続けるという判断をするわけがない。
 以上より、休日設定ファイルを指定させたのでユーザビリティ上、全く問題はないと結論。

 でも実際に作ってみると、Ver0.04でも問題なく動くようにするのって、そんなにたいへんじゃないのよね。うーんiniファイルを指定させるべきだったかなあ。拡張子iniのファイルが設定ファイルというのはある程度知られているから、ユーザーはその方が安心して作業できるだろうし。でもまあ、休日設定ファイルやiniファイルの場所を指定するのは最初の一回だけなので勘弁して。2回目以降はファイルが存在すれば自動的に読み込みます。でもそのうち気が向いたら修正するかもしれない。

 あと、今回からファイル指定のダイアログボックスで「キャンセル」をクリックすると普通にメッセージを出して初期状態に戻るようにしました。今まではデバッグモードに落ちていたのです。このプログラムは対話型だから異常終了しても異常終了箇所が即座に分かる限りエラーメッセージは不要、という考えで特にエラー処理を行っていなかったのです。(バッチ処理は問題のプログラムやレコードをスキップして処理を続け、後でエラー箇所を探す必要があることが多いので、必ずエラー内容をトレース可能なレベルで計表等に出力しておく必要がある。)でもやったほうがいいんじゃない、という意見がありましたのでそこだけはエラー処理をするようにしました。

 メールをくれた人の中に3人くらい「今までVBA作ったこと無いというのに、どうやって勉強したの?」というニュアンスの文がありました。(うち一名はTDC昆布をくれとも書かずに「マクロを教えてください」と書いてきた。あのーTDC昆布はあげると書いてますが、マクロを教えるとは書いてませんよ。)まあいい勉強法があるなら教えてほしいというのは当然の感情でしょう。
 まず泥縄で買ってきた参考書はSOFTBANKの「EXCELVBAハンドブック第二版」(この装丁なんとかしてくれ)。参考にしたサイトは「Excelでお仕事!」です。ただしこのサイト、図表が多いせいか1ページ2MBくらいになっていまして、ブロードバンドで接続していない限り見るのがつらいです。
 当方、プログラミングの勉強は企業内研修とOJTだけです。公式なキャリアは1年足らず。使用言語はPL/I。その後、オブジェクト指向がなんだかよく分からず、日本語で読める最初のオブジェクト指向解説書を読みたいがためにTurbo Pascalを買い、そのつながりでDelphiを使い始め、こそこそとツールを作っていたという程度です。プログラミングへの投資額、気がついてみれば莫大。これが公式なキャリアと認められないのはしゃくなので出来たものをフリーソフトとして公開しているという面もあります。
 ただし作っているものはプロの水準を満たしているという自信はあります。
 プログラム作成中に心がけていることは「極力前提を置かない」および「使用者に負担をかけない」ですかね。
 VBA書いていて楽だったのは「今プログラムが何をしているか」セル上でイメージできることですね。だからある程度込み入った処理をしても迷うことは少なかったです。これでもう少し言語仕様が美しければ入門用の言語として良いかもしれません。(個人的にはPascalがやはり一番だと思っています。構文エラーを無くすと自動的に美しいプログラムになっているというのはやはりすばらしい。)

 さて、テスト中に最重要ユーザーがやってきた。やはり色遣いが「見にくい」そうな。MS-Excelのカラーパレットからできるだけ似た色を探したんだけどなあ。
 ニョーボは「試しにこの色にしてみて」の要望を連発。旦那の工賃はゼロだと思っているらしい。まあこっちもニョーボの工賃(主に料理を作る)はゼロだと思っているのだからお互い様である。できあがった配色は、、、あれニョーボはこんなにセンスよかったかな?(って結局最後は自分できめたんだが。)

公開場所
問い合わせに応じた個別公開(こちらにメールください)

(2005.11.15追加)

 個人情報保護法が完全施行されて意識が高まったせいか「TDC昆布ください」のメールで誰から来たのか分からないものが増えました(というか大部分になった)。
 こういうメール、当方は反射的に消しています。
 自分が誰かも明かせない相手の作ったソフトウェアを使うという感覚に危なさを感じる、と説明すれば通用すると思います。
 もちろん住所名前勤務先を全部書けとは言いません。でも自分が誰だかそこまで隠すか?という印象は与えないでください。もっとも誰だか分からなくても笑わせてくれればかまわないとか、基準は結構いい加減です。また、自分のホームページ(あった場合)のURLを書いておいてくれれば、どういう人かイメージできますので大喜びで送ります。そういう意味では個人情報どーのとうるさくは言いません。たとえフリーメールのアドレスでも文章がおもしろければかまいません。つまりは名前よりも文体の方がその人のことが良く表しているという当方の感覚が根底にあるということです。

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