【ExcelVBA】 ワークシートの存在確認

ExcelVBA,シートの操作

自ブックの場合

ワークシートの存在確認

On Error Resume Next を使用して調べる方法
Sub Sample()
    
  Dim TargetWS As String
  Dim ChkWS As Worksheet

  TargetWS = "Sheet2"  '存在確認したいワークシート名明記
    
  On Error Resume Next ' エラー発生時の継続処理有効化

  Set ChkWS = Nothing
  Set ChkWS = ThisWorkbook.Worksheets(TargetWS)
    
  On Error GoTo 0      ' エラー発生時の継続処理無効化
    
  If ChkWS Is Nothing Then
    'ワークシートがない
    MsgBox TargetWS & " は、ありません!"
  Else
    'ワークシートがある
    MsgBox "安心してください。" & TargetWS & " は、ありますよ!"
  End If

  Set ChkWS = Nothing

End Sub
※6行目を目的のワークシート名に書き換えてください。

For Each xxx In Worksheets を使用して調べる方法
Sub Sample()
     
  Dim TargetWS As String
  Dim WS As Worksheet
  Dim ChkWS As Boolean: ChkWS = False
 
  TargetWS = "Sheet2"  '存在確認したいワークシート名
     
  For Each WS In Worksheets
    If WS.Name = TargetWS Then
      ChkWS = True
    End If
  Next
  
  If ChkWS = False Then
    'ワークシートがない
    MsgBox TargetWS & " は、ありません!"
  Else
    'ワークシートがある
    MsgBox "安心してください。" & TargetWS & " は、ありますよ!"
  End If
 
End Sub
※7行目を目的のワークシート名に書き換えてください。

他ブックの場合

他ブックのワークシートの存在確認

シートを調べる前に、対象ブックが開いていることも確認する
Sub Sample()
     
  Dim TargetWB As String
  Dim TargetWS As String
  Dim TargetChk As Variant
 
  TargetWB = "TEST.xlsx"  '対象ブック名明記
  TargetWS = "Sheet1"     '存在確認したいワークシート名明記
     
  On Error Resume Next ' エラー発生時の継続処理有効化
  
  Set TargetChk = Nothing
  Set TargetChk = Workbooks(TargetWB)
     
  On Error GoTo 0      ' エラー発生時の継続処理無効化
     
  If TargetChk Is Nothing Then
        MsgBox TargetWB & " は開いてる?"
        Exit Sub
  End If
  
  On Error Resume Next ' エラー発生時の継続処理有効化
   
  Set TargetChk = Nothing
  Set TargetChk = Workbooks(TargetWB).Worksheets(TargetWS)

  On Error GoTo 0      ' エラー発生時の継続処理無効化
          
  If TargetChk Is Nothing Then
    'ワークシートがない
    MsgBox TargetWB & " に " & TargetWS & " は、ありません!"
  Else
    'ワークシートがある
    MsgBox "安心してください。" & TargetWB & " に " & TargetWS & " は、ありますよ!"
  End If
 
  Set TargetChk = Nothing
 
End Sub
※7行目を目的のブック名に書き換えてください。
※8行目を目的のワークシート名に書き換えてください。

兎に角シンプルに調べる方法(ブックが開いていることを前提にしています!)
Sub Sample()
      
  Dim TargetWB As String
  Dim TargetWS As String
  Dim TargetChk As Variant
  
  TargetWB = "TEST.xlsx"  '対象ブック名明記
  TargetWS = "Sheet1"     '存在確認したいワークシート名
      
  On Error Resume Next ' エラー発生時の継続処理有効化
    
  Set TargetChk = Nothing
  Set TargetChk = Workbooks(TargetWB).Worksheets(TargetWS)
 
  On Error GoTo 0      ' エラー発生時の継続処理無効化
           
  If TargetChk Is Nothing Then
    MsgBox TargetWB & " に " & TargetWS & " は、ありません!"
  End If
  
  Set TargetChk = Nothing
  
End Sub


他ブックの複数ワークシートの存在確認

Sub 主処理()

  Dim WB As String
  Dim WS As Variant
  
  WB = "TEST.xlsx"  '対象ブック名明記
  WS = Array("Sheet1", "Sheet2", "Sheet55")   '存在確認したいワークシート名明記

  Call ワークシート存在確認(WB, WS)

End Sub

Sub ワークシート存在確認(ByVal TargetWB As String, ByVal ArrWS As Variant)

  Dim TargetChk As Variant
  Dim TargetWS As Variant
  
  On Error Resume Next ' エラー発生時の継続処理有効化
   
  Set TargetChk = Nothing
  Set TargetChk = Workbooks(TargetWB)
      
  On Error GoTo 0      ' エラー発生時の継続処理無効化
      
  If TargetChk Is Nothing Then
        MsgBox TargetWB & " は開いてる?"
        Exit Sub
  End If
   
  For Each TargetWS In ArrWS
    
     On Error Resume Next ' エラー発生時の継続処理有効化
       
     Set TargetChk = Nothing
     Set TargetChk = Workbooks(TargetWB).Worksheets(TargetWS)
    
     On Error GoTo 0      ' エラー発生時の継続処理無効化
              
     If TargetChk Is Nothing Then
       'ワークシートがない
       MsgBox TargetWB & " に " & TargetWS & " は、ありません!"
     Else
       'ワークシートがある
       MsgBox "安心してください。" & TargetWB & " に " & TargetWS & " は、ありますよ!"
     End If
     
     Set TargetChk = Nothing
    
  Next

End Sub


ブックを開かない場合(ExecuteExcel4Macro)

ブックを開かないでワークシートの存在確認

Sub Sample()
 
  Dim WB_PATH As String
  Dim WB_NAME As String
  Dim WS_NAME As String
   
  WB_PATH = "E:\TEST\"
  WB_NAME = "売上.xlsx"
  WS_NAME = "Sheet2"
  
  Dim buf As String
  Dim STR As String
  
  STR = "'" & WB_PATH & "[" & WB_NAME & "]" & WS_NAME & "'!R1C1"
   
  On Error Resume Next ' エラー発生時の継続処理有効化

    buf = ExecuteExcel4Macro(STR)
    
    If Err.Number <> 0 Then
      MsgBox "ワークシート [ " & WS_NAME & " ] は見つかりませんでした。", vbExclamation
      Exit Sub
    Else
      MsgBox "ワークシート [ " & WS_NAME & " ] は見つかりました。", vbInformation
    End If
 
  On Error GoTo 0      ' エラー発生時の継続処理無効化
  
End Sub
シートを調べるために重いブックをいちいち開くのは非効率だったりします。
ExecuteExcel4Macro でシートを調べるのは結構おすすめです。