はじめに
Excelの標準機能には、セルにそのシート自身の名前を表示するための簡単なワークシート関数が用意されていません(CELL
関数などを使えば可能ですが、複雑です)。
しかし、VBAで**ユーザー定義関数(UDF: User-Defined Function)**を作成すれば、=GetSheetName()
のように、通常の関数と同じ手軽さで、いつでもシート名を取得できるようになります。
この記事では、現在アクティブなシートの名前を返す、シンプルで非常に便利な自作関数の作り方を、ステップ・バイ・ステップで解説します。
シート名を取得する自作関数(UDF)のサンプルコード
ユーザー定義関数は、標準モジュールに記述する必要があります。ThisWorkbook
やシートモジュールに記述しても、ワークシート上で関数として認識されないので注意してください。
標準モジュールの完成コード
' 現在のシート名を取得して返すユーザー定義関数
Public Function GetSheetName() As String
' Application.Volatile を設定して、再計算時にこの関数が再評価されるようにする
Application.Volatile
' Application.ThisCell で、この関数が入力されているセル自身を参照し、
' その親であるシート(.Parent)の名前(.Name)を関数の戻り値に設定する
GetSheetName = Application.ThisCell.Parent.Name
End Function
関数の使い方
1. コードの設置
- VBE(
Alt + F11
)を開きます。 - 「挿入」→「標準モジュール」を選択し、新しい標準モジュールを作成します。
- 上記コードを、作成した標準モジュールに貼り付けます。
2. ワークシートでの使用
通常のExcel関数と同じように、シート名を表示したいセルに以下のように入力します。
=GetSheetName()
入力すると、そのセルにシート名(例: Sheet1
)が表示されます。
コードの解説
Public Function GetSheetName() As String
Sub
の代わりに Function
を使うことで、値を返すプロシージャ、つまり「ユーザー定義関数」を定義できます。Public
を付けることで、このブックのどのシートからでも呼び出せるようになります。As String
は、この関数が返す値のデータ型が文字列であることを示します。
Application.Volatile
これは、この関数を揮発性関数として設定する命令です。
- 通常、ユーザー定義関数は、引数が変更されたときにしか再計算されません。
Application.Volatile
を記述しておくと、シート上で何か変更があるたびに(例: 別のセルが編集された、F9キーが押されたなど)、この関数も再計算されるようになります。- これにより、ユーザーが後からシート名を変更した場合でも、その変更が関数の結果に自動的に反映されるようになります。
GetSheetName = Application.ThisCell.Parent.Name
この一行が、シート名を取得する核心部分です。
Application.ThisCell
: この関数が入力されているセルそのものをRange
オブジェクトとして返します。.Parent
: オブジェクトの親オブジェクトを返します。Range
オブジェクトの親はWorksheet
オブジェクトなので、これは「関数が入力されているセルが属するシート」を指します。.Name
:Worksheet
オブジェクトの.Name
プロパティは、そのシートの名前を文字列で返します。- 最後に、取得したシート名を、関数名
GetSheetName
自身に代入することで、それが関数の戻り値となります。
まとめ
今回は、VBAでシート名を取得するオリジナルのワークシート関数を作成する方法を解説しました。
Public Function
を使って、ユーザー定義関数を作成する。Application.Volatile
で、シート名変更時に結果が自動更新されるようにする。Application.ThisCell.Parent.Name
で、関数が入力されたシートの名前を取得する。
一度この関数を個人用マクロブックに保存しておけば、どのExcelファイルでも =GetSheetName()
と入力するだけで、いつでも簡単にシート名を表示できるようになり、非常に便利です。