【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 でシートを調べるのは結構おすすめです。
ディスカッション
コメント一覧
まだ、コメントがありません