【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 でシートを調べるのは結構おすすめです。




ディスカッション
コメント一覧
まだ、コメントがありません