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名が存在するかを調べることができます。
便利だなと思ったので、備忘録です。
ではではこの辺で(^^)/~~~