2011年12月31日

できるけどお勧めしないこと

予想はしていましたが、こちらでダウンロード販売している『追加関数』の“本”は、正直、まだほとんど売れていません(^^;)。
そこで、その宣伝の意味も兼ねて、またまたユーザー定義関数(UDF)のネタを。

UDFでは、一般的なVBAのプログラム(マクロ)に比べて、実行できない処理が結構あります。
たとえば、セルやワークシートを直接変更するような処理です。

一方で、一般的なワークシート関数のように「数式の中で計算結果を返すだけ」というわけでもなく、やはりVBAのプログラムですから、いくらかはその枠を超える処理も実現可能です。
具体的には図形(描画オブジェクト)を変更する操作などで、その実例となる関数も、同書にはいくつか収めています。

また、関数が計算されるタイミングで、メッセージボックスや入力ボックス、ユーザーフォームなどを表示することも可能です。
たとえば再計算が行われるつど入力ボックスを表示し、入力された値を計算で使用するといった利用法が考えられます。
こうした関数の使用例も、実はいくつか考えたのですが、最終的に同書では没としました。

没にした理由は、一言でいうと、[関数の引数]ダイアログボックスとの相性が悪いから、です。

条件が真の場合に指定したメッセージを表示する「IF_MESSAGE」という関数の場合、[関数の引数]ダイアログから使用しようとすると、ダイアログを表示している状態の上からメッセージボックスが何度も表示されてしまいました。
[関数の引数]ダイアログを使わず、セルに直接入力するような注意書きを付けて収録しようかとも思ったのですが(実際、そのようにしている関数もあります)、そこまでするほど面白くも有用でもないと判断し、同書には収録しませんでした。

この例に限らず、[関数の引数]ダイアログでは、計算の結果をプレビューするため、セルに入力する前の段階で、その関数の処理が実際に行われます。
このため、求める情報の取得手順が複雑な場合は、ダイアログ上での操作が重くなってしまったり、表示に不具合が発生する可能性もあります。

UDFではこのような処理は避けるか、あるいはダイアログを使わず手入力してもらうことを徹底する必要があります。
posted by 土屋和人 at 12:27| Comment(0) | TrackBack(0) | Excel