備忘録記事です。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」となるので、最終行での判定がキモとなる。
大変申し訳ありませんがこの記事は備忘録記事のため、詳しい解説はしていません。