エクセルでのプログラミングで、今回はユーザー関数(Function)を使ってセル上で使用するという手法を使ってみました。

結果的にコーディング量は劇的に少なくできたのですが、別シートのデータを使用する場合に関数の再計算が行われないという現象が発生しました。

いろいろ調べたところ、以下の方法で回避できます。

  1. 作ったユーザー関数に、”Application.Volatile”と記述する。
  2. Ctrl+Alt+F9で強制的に再計算する。

ところが、1.の場合ブックのセルが変更されるたびにすべての再計算が行われるため処理が異常に遅くなります。
また、2.の方法はユーザーが実行するのでやり方を忘れる恐れがあります。

いろいろ悩んだ結果、マクロの記録で2.の方法を実行してみて、どんなコードになるか確認してボタンクリックで実行するようにしました。(ボタンのCaptionは「再計算」にしました)
生成されたコードは、”Application.CalculateFull” でした。