ExcelVBA~シートが存在するかを確認する~

備忘録記事です。ExcelのVBAでシートが存在するかどうかを確認する方法。

1.全てのシートをループして判定する方法

Public Function SheetExists(Name as String) As Boolean
 Dim ws As Worksheet
  For Each ws In Sheets
  If ws.name=name then
  ’存在する場合
   SheetExists=True
   Exit Function
  End If
  Next
 '存在しない場合
 SheetExists=False
End Function

引数「Name」にシート名を指定することで全てのシートを当たって同じシート名があれば「存在する(True)」、全て当たっても該当しなければ「存在しない(False)」という結果を返します。

2.ループ処理せずに判定する方法

Public Function SheetExists(sName As String) As Boolean
 Dim wb As Excel.Workbook,ws As Excel.Worksheet
 Set wb=ThisWorkbook
 On Error Resume Next
 Set ws = wb.Worksheets(sName)
 On Error GoTo 0
 SheetExists = Not ws Is Nothing
End Function

「Set ws=」の行で引数のシート名のシートをセットする(その前のOn Errore Resume Nextでエラー回避、直後のOn Error GoTo 0でエラー回避を即座に無効化)。
シートが変数としてセットできれば「存在する」ことになるし、セットできなければ「Nothing」となるので、最終行での判定がキモとなる。

大変申し訳ありませんがこの記事は備忘録記事のため、詳しい解説はしていません。