ユーザー定義関数が入力されたセルを取得する
Application.Callerで、ユーザー定義関数を呼び出したセルのアドレスを返します。
実行前に確認
- Application.Callerは呼び出し元によってRange以外の値も返すので型を確認します。
- これは数式が入力されたセルです。ActiveCellや直前にユーザーが編集したセルを返す機能ではありません。配列数式では複数セル範囲が返る場合があります。
- Excel実機での動作は未確認です。コピーした練習用ブックで試してください。
1サンプルコード
Option Explicit
Public Function FormulaCell7042() As String
Dim callerRange As Range
If TypeName(Application.Caller) <> "Range" Then
FormulaCell7042 = "セルから呼び出してください"
Exit Function
End If
Set callerRange = Application.Caller
FormulaCell7042 = callerRange.Address(False, False)
End Function図で見るユーザー定義関数が入力されたセルを取得するの流れ
イメージ図Application.Callerで、ユーザー定義関数を呼び出したセルのアドレスを返します。
入力・開始時
B3とD5へ=FormulaCell7042()を入力
実行する処理
Application.CallerのRangeからAddressを読む
結果
B3にはB3、D5にはD5を表示
ActiveCellではなく数式の呼び出し元です。複数セル配列数式では範囲を返す場合があります。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する4つの手順で、コードの使い方を確認できます
- 1
練習用.xlsmの空の標準モジュール先頭にコード全体を貼ります。
- 2
Excel画面へ戻り、空いているB3へ=FormulaCell7042()と入力します。
- 3
別の空きセルD5にも同じ数式を入力します。
- 4
B3にはB3、D5にはD5と表示されます。必要ならF9で再計算します。