【VBA】シート名を取得する自作ワークシート関数(UDF)の作り方

目次

はじめに

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. コードの設置

  1. VBE(Alt + F11)を開きます。
  2. 「挿入」→「標準モジュール」を選択し、新しい標準モジュールを作成します。
  3. 上記コードを、作成した標準モジュールに貼り付けます。

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() と入力するだけで、いつでも簡単にシート名を表示できるようになり、非常に便利です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次