以下の内容はhttps://www.limecode.jp/entry/get-user-defined-function-callerより取得しました。


ユーザー定義関数が呼ばれたセルを取得する - Caller

ユーザー定義関数(Function)が呼ばれたセルを取得するには、
Application.Callerプロパティを使用します。

Function ユーザー定義関数() As String

    Dim 入力セル As Range
    Set 入力セル = Application.Caller

 
例えば「入力セルのアドレスを表示する関数」を作る場合は、
以下のようなFunctionを定義します。

Function Get入力されたセルアドレス() As String

    Dim 入力セル As Range
    Set 入力セル = Application.Caller

    Get入力されたセルアドレス = 入力セル.Address(False, False)

End Function

 
このFunctionを以下の画像のようにシート上で使用すると、
ちゃんと入力セルが取得できていることが分かります。

ユーザー定義関数サンプル


入力セルが結果に反映される代表的な関数にROW/COLUMN関数がありますが、
以下のようなコードで再現することが出来ます。

Function 再現ROW関数(Optional 参照 As Range) As Long

    ' 省略時は関数が入力されたセルの行番号を返す
    If 参照 Is Nothing Then
        Set 参照 = Application.Caller
    End If
        
    再現ROW関数 = 参照.Row
    
End Function

 
入力セル.Row/.Columnを使用すれば行列に応じた動きにできますので、
入力セルごとに処理を変えたい関数を作りたいときに活用してください。


なお、Application.Callerは通常の呼び出しでは#REFを返します。

※今回はFunctionのためあまり関係ありませんが、
Subをボタンから実行した場合は実行したボタン名を取得できます。


Functionがセル以外から呼ばれる可能性もある場合は、
Application.Callerの結果値をTypeNameで調べて分岐してください。

Function ユーザー定義関数() As String

    If TypeName(Application.Caller) = "Range" Then
        Dim 入力セル As Range
        Set 入力セル = Application.Caller
    End If

End Function



以上の内容はhttps://www.limecode.jp/entry/get-user-defined-function-callerより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14