はじめに
ひらちんです。
以前に、次の記事でWorksheet上で使える”ユーザー定義関数”の作り方を紹介しました。
この作成したユーザー定義関数は、引数に渡される値が変更された場合は再計算されます。
例えば、次のユーザー定義関数を定義しているとします。
Function myFunc(rng As Range) As Long
MsgBox "来たよ"
myFunc = rng.Value * 100
End Function
関数が反応したら、まずは「来たよ」とメッセージが表示されて、その後引数に渡されたセルの値を100倍して返します。
B2セルにこのユーザー定義関数を入力しましょう。
引数で渡すセルはA2セルです。
こんな感じですね。
特に問題ありません。
引数に渡しているA2セル以外のセルが変更になった場合は、どのような動きになるでしょう。
見てみましょう。
はい。
引数に渡したセル以外のセルの値が変更されても、何も起こりませんね。
「当たり前やん。」と思っている方。
実は違うんです。
SUMやCOUNTなどの一般的に最初から組み込まれている関数は、引数に渡したセルの値では無い、任意のセルの値が変更されたときにも再計算されています。
ということで、自作したユーザー定義関数も、一般的なワークシート関数のように、任意のセルが変更されたときに再計算してくれるようにしたいと思います。
Volatileメソッド
ApplicationオブジェクトのVolatileメソッドを、Functionプロシージャの先頭に記述するだけです。
簡単です(^o^)
先程のコードに、追加しましょう。
Function myFunc(rng As Range) As Long
Application.Volatile 'これを書くだけ
MsgBox "来たよ"
myFunc = rng.Value * 100
End Function
簡単ですね(^o^)
では、実際に試してみます。
はい。
コードだけ修正しているので、数式や参照セルは同じままです。
A2セルを修正した場合も、その他のセルに入力したり削除したり変更を加えた場合も関数が反応していることが分かります。
以上です!!
コメント