Book内に特定の名前のSheet名が存在するかスマートに調べる方法

Book内に特定の名前のSheetが存在するか調べるには…

私が最初に思いつくのは、For each in Sheetsで、シートをループして特定の名前があるかを調べるです。

Sub Sheet名が存在するか調べる()

'Sheetに”2020年12月”があるか調べる。
For Each sh In Sheets
    shCount = shCount + 1
    shCounts = Sheets.Count
    
    'Bookが1回目の書込み処理
    If sh.Name = "2020年12月" Then
        MsgBox "2020年12月は存在します"
    
    Else
        '"2020年12月"のSheetが無い場合
        If shCount = Sheets.Count Then
            MsgBox "2020年12月は存在しません"
            
        End If
    End If
Next

End Sub


力ずくな感じですね(;^ω^)
VBA100本ノックをやってる中で、サイト管理者のコードを見ていてこれは便利だ!というのがあったので、備忘録として記録しておきます。

スマートなSheet名存在するか調べるコード

Sub BookにSheetが存在するかどうか()

Const shtName = "2020年12月"

Dim wbT As Workbook, wsT As Worksheet
Dim sFile As String: sFile = "A.xlsx"

myPath = ThisWorkbook.Path & "\40本目\data\"

Set wbT = Workbooks.Open(Filename:=myPath & sFile, UpdateLinks:=0, ReadOnly:=True)
Set wsT = getWorksheet(wbT, shtName)

If Not wsT Is Nothing Then
    MsgBox shtName & "は存在します。"
Else
    MsgBox shtName & "は存在しません。"
End If

End Sub

Function_getWorksheet

Function getWorksheet(ByVal wb As Workbook, ByVal aName As String) As Worksheet
    On Error Resume Next
    Set getWorksheet = wb.Worksheets(aName)
End Function


これは、特定のフォルダに存在するA.xlsxのBookを開いて、Sheet名に「2020年12月」があるかどうかを調べます。

特定のファルダの.xlsxファイルに特定のSheet名が含まれるか調べる方法

Sub ファイル内のSheetが存在するかどうか()

Const shtName = "2020年12月"

Dim wbT As Workbook, wsT As Worksheet
Dim sFile As String

myPath = ThisWorkbook.Path & "\40本目\data\"

sFile = Dir(myPath & "*.xlsx")

'主処理
Do While sFile <> ""
    Set wbT = Workbooks.Open(Filename:=myPath & sFile, UpdateLinks:=0, ReadOnly:=True)
    Set wsT = getWorksheet(wbT, shtName)
    
    If Not wsT Is Nothing Then
        MsgBox shtName & "は存在します。"
    Else
        MsgBox shtName & "は存在しません。"
    End If
    
    wbT.Close SaveChanges:=False  'Bookを閉じる
 
    sFile = Dir()   '次のファイルへ移動
Loop

End Sub


Dir関数で.xlsxファイルのみを取得し、Do Loopで特定のSheet名があるかを判定します。
どうでしょうか?Function(getWorksheet)でSetできたかどうかでSheet名が存在するかを調べることができます。
便利だなと思ったので、備忘録です。


ではではこの辺で(^^)/~~~