「VBA Application.Caller 型」
「excel vba Application.Caller 戻り値」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へ時折アクセスがあります。
Applicationオブジェクトに用意されているCallerプロパティの戻り値が何なのか、
戻り値のデータ型が何かを調べていた方による検索でしょう。
Application.Callerの戻り値は変化する
Application.Callerプロパティは、現在のExcel VBAとは仕様の異なる、Excel 95時代から存在する(変な仕様の)プロパティです。
厄介なことに、Application.Callerプロパティの戻り値のデータ型は、どこから呼ばれたかによって変化してしまいます。
例えば、ユーザー定義関数の中でApplication.Callerプロパティが呼ばれた場合、戻り値の型はRange型です。
TypeName関数でApplication.Callerを確認する
コードを実行して、Application.Callerプロパティの戻り値の型を確認しましょう。
まず、以下のようなFunctionプロシージャを作成してください。
Dim tmp As Variant
Set tmp = Application.Caller
MsgBox TypeName(tmp)
End Function
作成したら、いずれかのセルに
=Callerを確認する_ユーザー定義関数の場合()
と入力してください。すると「Callerを確認する_ユーザー定義関数の場合」Functionプロシージャが実行され、メッセージボックスに変数tmpのデータ型「Range」が表示されます。
ローカルウィンドウでApplication.Callerを確認する
拙著『いちばんやさしいPowerPoint VBAの教本』や『いちばんやさしいExcel VBAの教本』で多用しているローカルウィンドウを使っても、Application.Callerプロパティの戻り値を確認できます。
先ほどのFunctionプロシージャを以下のように修正してから、
Dim tmp As Variant
Set tmp = Application.Caller
' MsgBox TypeName(tmp) ' コメントアウト
Stop ' 追加したコード
End Function
いずれかのセルに先ほどと同様に
=Callerを確認する_ユーザー定義関数の場合()
と入力してください。
今度は、Stopステートメントで中断してVBEが起動し、下図のようになります。
この状態で、VBEのメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すると、Application.Callerプロパティの戻り値のデータ型が確認できます。
Functionプロシージャの中で、Variant型で宣言した変数tmpに、
Dim tmp As Variant
Application.Callerプロパティの戻り値(Range型のデータ)が代入されたため、
Set tmp = Application.Caller
下図のとおり[型]欄に「Variant/Object/Range」と表示されています。
以上のとおり、ユーザー定義関数の中でApplication.Callerプロパティが呼ばれた場合、戻り値の型はセルを表すRange型です。
最終更新日時:2021-11-04 12:23
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » Application.Callerの戻り値の型は?-ユーザー定義関数の場合