左からN番目のシート名を表示するユーザー定義関数

左からN番目のシート名を表示するExcel VBA関数の作成

Excelの標準関数ではシートの位置(インデックス番号)を指定して、そのシート名を表示させることはできません。これを実現するにはユーザー定義関数を作成する必要があります。

ExcelのVisual Basic for Applications(VBA)を使用して、ワークブック内の特定のシート名を表示するユーザー定義関数を作成する方法について説明します。

シート番号を指定したら、そのシート名が表示される関数を作る方法。

シート番号を指定したら、そのシート名が表示される関数を作る方法。

【参考】アクティブなシートの名前を表示させるならば標準関数で対応できます。その式は以下のページで紹介しています。

Excelでブックのシート名を取得する計算式の設置方法(従来式)
Excelでシート名を取得する計算式の作成方法Excelの多くの場面で、現在作業しているシートの名前を文書内で参照したいと思うことがあります。たとえば、特定のシートからのデータを基にした報告を作成する際に、そのシートの名前を自動で文書に挿入...

関数のコード

Function GetSheetName(SheetIndex As Variant) As String
    Application.Volatile  ' 関数を揮発性に設定
    Dim index As Integer
    On Error Resume Next  ' エラーハンドリングを行う

    ' 引数が空白または0の場合、アクティブシートの名前を返す
    If IsEmpty(SheetIndex) Or SheetIndex = 0 Then
        GetSheetName = ActiveSheet.Name
        Exit Function
    End If
    
    ' 引数がマイナスの数値の場合、右からのシート名を取得
    If SheetIndex < 0 Then
        index = ThisWorkbook.Sheets.Count + SheetIndex + 1
    Else
        index = SheetIndex
    End If
    
    ' インデックスが有効な範囲内であればシート名を取得
    If index > 0 And index <= ThisWorkbook.Sheets.Count Then
        GetSheetName = ThisWorkbook.Sheets(index).Name
    Else
        GetSheetName = ""  ' 無効なインデックスの場合は空文字を返す
    End If
    
    On Error GoTo 0  ' エラーハンドリングを終了する
End Function

関数の説明

この関数では、引数としてシートのインデックス(左から数えた番号)を受け取り、そのシートの名前を返します。

インデックスが指定されない場合や、インデックスが0の場合はアクティブなシート名を返します。

インデックスが-1など負の数の場合は右から数えたシートの名前を返します。

存在しないインデックスを指定した場合は空白を返します。

関数の使い方

この関数を使って、例えば左から3番目のシート名を表示するには、`=GetSheetName(3)`という数式をセルに入力します。引数を指定しない場合(つまり`=GetSheetName()`と入力する場合)は、左から1番目(つまり最初)のシート名が表示されます。

もちろん引数にセルを指定することも可能です。

下のサンプルブックにはSheet1~4と4枚あり、かつSheet2がアクティブになっています。B列ではA列のインデックス番号のシート名が返る式を立てています。

注意事項

このVBA関数は、ワークブックがマクロを許可する設定になっている場合にのみ機能します。また、この関数を含むワークブックは、マクロ付きワークブック(.xlsm形式)として保存する必要があります。

なお、アクティブシートの名前を表示させるならば組み込みの「CELL関数」が使用可能です。

コメント