Excelはテキストコンバータとして非常に優秀だ。ある一定のルールに従ったテキストを別のルールに置換する。ちょっとしたルールであれば、関数でなんとかなってしまうし*1、少し複雑なルールであればVBAを使えばよい*2。場合によっては、関数とVBAの組み合わせなんてこともできる。まあ、とにかくEXCELにかなうテキストコンバータはそうあるものではない。
いろいろなVBAで作るテキストコンバータを見てきたけれど、VBAマスタはプログラマだけではなく、スーパーなユーザがなることが多いので、残念ながらちょっとした気遣いが欠けることが多い。以下に、ちょっとした気遣いを記載しようと思う。
・変換終了を表示する
変換が終了したら、ユーザに変換が終了したことを伝えよう。ループ処理終了後に「変換処理が終わりました」というメッセージボックスさえ出すだけで、ユーザの満足度は向上する。メッセージボックスが出ない場合、ユーザは「変換がうまくいかなかった」のか、「変換がうまくいって終了したのか」を認識することができない。
・処理件数を表示する
テキストコンバータは、一般的に複数行のデータをコンバートするのであるが、全行を処理したことがユーザにわかるように、処理対象の件数を変換後にユーザに伝えた方がよい。これは上記「変換終了」表示に含んでもよい。
・変換に長時間かかるのであれば、実行前に「本当に実行するか」ユーザに問う
VBAの起動トリガは、ボタンが多いと思うけれど、ボタンを押下すると問答無用に処理が始まってしまうのはよろしくない。ボタンの押し間違えなんて、簡単に発生するのだから、処理開始してよいかをユーザに問わなければならない。このときに、ボタンのフォーカスは「No」か「キャンセル」に当たっていること。
・変換に長時間かかるのであれば、ループ内にDoEventsを入れる
ループ内にDoEventsを入れておくと、ブレイクが効くのだ。処理を強制的に中断することができる。永久ループも脱出できるのだ。だから、DoEventsをループに入れておくのは極めてお勧めだ。処理を開始してしまったが最後、処理が進んでいるのか、止まっているのかわからない状態に陥ることはよくあるので、DoEventsを入れることをお勧めする。
ーー
まあ、こんなことを注意するだけで、結構使い勝手は向上したりする。ユーザからなかなか出てこない要望なので、ちゃんと対応するといいかもしれない。