シートが存在するか調べる関数

タイトルのマクロは、以下です。

'********************************************************
'* シートが存在するか調べる関数。20180119
'* sheetName(String型):チェックするシート名
'* 戻り値:シートが存在すればTrue、存在しなければFalse
Function fncSheetExist(sheetName As String) As Boolean

  Dim objWS As Worksheet    ' Worksheetオブジェクトを宣言
  
  fncSheetExist = False     ' 戻り値をFalseに初期化
  
  ' 全てのシートをループしてチェック
  For Each objWS In Worksheets
      ' シート名が一致するか確認
      If objWS.Name = sheetName Then
          fncSheetExist = True  ' 一致した場合、戻り値をTrueに設定
          Exit For              ' ループを終了
      End If
  Next objWS

End Function

各部分の説明

Function fncSheetExist(sheetName As String) As Boolean
  • 関数の定義を行います。関数名は fncSheetExist で、引数としてシート名 sheetName を受け取ります。
  Dim objWS As Worksheet    ' Worksheetオブジェクトを宣言
  • Worksheet オブジェクトを宣言します。このオブジェクトは、全てのシートを順番に指します。
fncSheetExist = False     ' 戻り値をFalseに初期化
  • 関数の戻り値を False に初期化します。これは、指定されたシートが存在しないと仮定しての設定です。
  For Each objWS In Worksheets
  • 全てのシートを Worksheets コレクションで順番にループします。
      ' シート名が一致するか確認
      If objWS.Name = sheetName Then
          fncSheetExist = True  ' 一致した場合、戻り値をTrueに設定
          Exit For              ' ループを終了
      End If
  Next objWS
  • ループ内で、各シートの名前をチェックします。
    • If objWS.Name = sheetName Then: 現在のシート名が引数 sheetName と一致するか確認します。
    • fncSheetExist = True: 一致する場合、関数の戻り値を True に設定します。
    • Exit For: 一致するシートが見つかったので、ループを終了します。

使用例

Sub CheckSheetExistence()
    Dim sheetName As String

    ' ユーザーにシート名を入力させる
    sheetName = InputBox("確認したいシート名を入力してください:")

    ' 入力されたシート名が存在するかを確認
    If fncSheetExist(sheetName) Then
        ' シートが存在する場合
        MsgBox "シート '" & sheetName & "' が存在します。", vbInformation
        ' シートをアクティブにする
        Worksheets(sheetName).Activate
    Else
        ' シートが存在しない場合
        MsgBox "シート '" & sheetName & "' は存在しません。", vbExclamation
    End If
End Sub

ブックを指定できるように改造した関数

冒頭の関数は、ブックの指定ができませんできたが、以下は、ブックの指定を追加した関数です。

'********************************************************
'* シートが存在するか調べる関数。20180119
'* sheetName(String型):チェックするシート名
'* wb(Workbook型):チェックするブック
'* 戻り値:シートが存在すればTrue、存在しなければFalse
Function fncSheetExist(ByVal sheetName As String, ByVal wb As Workbook) As Boolean

  Dim objWS As Worksheet    ' Worksheetオブジェクトを宣言
  
  fncSheetExist = False     ' 戻り値をFalseに初期化
  
  ' 全てのシートをループしてチェック
  For Each objWS In wb.Worksheets
      ' シート名が一致するか確認
      If objWS.Name = sheetName Then
          fncSheetExist = True  ' 一致した場合、戻り値をTrueに設定
          Exit For              ' ループを終了
      End If
  Next objWS

End Function

おこのみの関数を使用してください。

Follow me!