• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:関数が書かれているセル位置を知りたいのですが、、、)

Excel VBAで関数の位置を取得する方法

このQ&Aのポイント
  • Excel VBAを使用して、関数の位置を取得する方法について教えてください。
  • 関数内で「TypeName(Application.Caller)」を使用すると、「Double」や「Error」が返ってくるようです。
  • 「No.720361 質問:Excel VBA でFunctionプロシジャがどのセルから呼び出されたか知る方法」という質問では、Application.Callerを使用して位置を取得しているようです。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 Testプロシージャを、以下のようにして、A2に、 「=Test()+A1」 としてみて下さい。 Function Test() As Double   With Application.Caller     Debug.Print .Row     Debug.Print .Column     Debug.Print .Address     Debug.Print .Worksheet.Name   End With   Debug.Print TypeName(Application.Caller)   Test = 2 End Function イミディエントウィンドウには、 2 1 $A$2 Sheet1(ここは実際のシート名) Range と出力されると思います。 Application.Callerプロパティは、Rangeオブジェクトを返します。 (だから、TypeName関数は「Range」を返すはずです。)

clavia
質問者

お礼

なりました、ありがとうございました。 ですが、疑問が残りました。 というのは、上記関数内にブレイクポイントを設定し、 止まったときにイミディエイトウィンドウから、 「?TypeName(Application.Caller)」とすると 「Error」(私の実際の関数では「Double」)を返すのです。 私は、これで「Range」が返らない返らないと悩んでおりました。 イミディエイトウィンドウの「Double」は何なのでしょうか? また、どういった理由で違ったオブジェクトを返すのでしょうか? maruru01さま、あるいはどなたかよければ教えて下さい。よろしくお願いします。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

>「Error」(私の実際の関数では「Double」)を返すのです。 私も確認しました。 ヘルプによると、Application.Callerプロパティは、呼び出された方法によって、セットされる値が違います。 で、プロシージャの実行中断時に、イミディエントウィンドウ上で呼び出されると、「Double」を返すようです。 ただし、何故「Double」かは分かりません。 また、実行中で無い時に、イミディエントウィンドウで呼び出すと、エラー(#REF!)を返すようです。 エラーはともかく、何故「Double」なんでしょうね。 他の方の回答をお待ち下さい。

関連するQ&A