左からN番目のシート名を表示するExcel VBA関数の作成
Excelの標準関数ではシートの位置(インデックス番号)を指定して、そのシート名を表示させることはできません。これを実現するにはユーザー定義関数を作成する必要があります。
ExcelのVisual Basic for Applications(VBA)を使用して、ワークブック内の特定のシート名を表示するユーザー定義関数を作成する方法について説明します。
【参考】アクティブなシートの名前を表示させるならば標準関数で対応できます。その式は以下のページで紹介しています。

関数のコード
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関数」が使用可能です。

コメント