左から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関数」が使用可能です。
コメント