アプリ版:「スタンプのみでお礼する」機能のリリースについて

実行環境は Excel 2000

新規ブックに、
標準モジュールを追加し、

Function Test()
  Test = 2
End Function

という関数を追加します。

Sheet1 の、
セル「A1」に「10」を入れます。
セル「A2」に「=Test() + A1」

セル「A1」を変更すると、
関数「Test()」が呼び出されます。

このとき、ActiveCell は「A1」を指しますが、
関数「Test()」の位置を知りたいのです。

「No.720361 質問:Excel VBA でFunctionプロシジャがどのセルから呼び出されたか知る方法」では Application.Caller で出来ているようですが、Test() 内で「TypeName(Application.Caller)」とすると、「Double」や「Error」が返ってきます。
(この「Double」の値も気になりますが、、、)

位置の取得方法を教えて下さい、よろしくお願いします。

A 回答 (2件)

こんにちは。

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」を返すはずです。)
    • good
    • 0
この回答へのお礼

なりました、ありがとうございました。

ですが、疑問が残りました。
というのは、上記関数内にブレイクポイントを設定し、
止まったときにイミディエイトウィンドウから、
「?TypeName(Application.Caller)」とすると
「Error」(私の実際の関数では「Double」)を返すのです。

私は、これで「Range」が返らない返らないと悩んでおりました。

イミディエイトウィンドウの「Double」は何なのでしょうか?
また、どういった理由で違ったオブジェクトを返すのでしょうか?

maruru01さま、あるいはどなたかよければ教えて下さい。よろしくお願いします。

お礼日時:2003/12/08 10:51

>「Error」(私の実際の関数では「Double」)を返すのです。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています