Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » Application.Callerの戻り値の型は?-ユーザー定義関数の場合

Application.Callerの戻り値の型は?-ユーザー定義関数の場合

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2109 ビルド14430.20298 Microsoft Store)

「VBA Application.Caller 型」
「excel vba Application.Caller 戻り値」
といった検索キーワードで、このサイト『インストラクターのネタ帳』へ時折アクセスがあります。

Applicationオブジェクトに用意されているCallerプロパティの戻り値が何なのか、

Excel.Application.Caller

戻り値のデータ型が何かを調べていた方による検索でしょう。

[スポンサードリンク]

Application.Callerの戻り値は変化する

Application.Callerプロパティは、現在のExcel VBAとは仕様の異なる、Excel 95時代から存在する(変な仕様の)プロパティです。

厄介なことに、Application.Callerプロパティの戻り値のデータ型は、どこから呼ばれたかによって変化してしまいます。

例えば、ユーザー定義関数の中でApplication.Callerプロパティが呼ばれた場合、戻り値の型はRange型です。

TypeName関数でApplication.Callerを確認する

コードを実行して、Application.Callerプロパティの戻り値の型を確認しましょう。

まず、以下のようなFunctionプロシージャを作成してください。

Function Callerを確認する_ユーザー定義関数の場合()
 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プロシージャを以下のように修正してから、

Function Callerを確認する_ユーザー定義関数の場合()
 Dim tmp As Variant
 Set tmp = Application.Caller
 ' MsgBox TypeName(tmp) ' コメントアウト
 Stop ' 追加したコード
End Function

いずれかのセルに先ほどと同様に

=Callerを確認する_ユーザー定義関数の場合()

と入力してください。

今度は、Stopステートメントで中断してVBEが起動し、下図のようになります。

中断中のApplication.Callerを確認するFunctionプロシージャ

この状態で、VBEのメニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示すると、Application.Callerプロパティの戻り値のデータ型が確認できます。

Functionプロシージャの中で、Variant型で宣言した変数tmpに、

Dim tmp As Variant

Application.Callerプロパティの戻り値(Range型のデータ)が代入されたため、

Set tmp = Application.Caller

下図のとおり[型]欄に「Variant/Object/Range」と表示されています。

ローカルウィンドウでApplication.Callerの戻り値を確認

以上のとおり、ユーザー定義関数の中でApplication.Callerプロパティが呼ばれた場合、戻り値の型はセルを表すRange型です。

最終更新日時:2021-11-04 12:23

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » Application.Callerの戻り値の型は?-ユーザー定義関数の場合

「ユーザー定義関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.