【VBA】指定した名前のシートが存在するか確認する方法

Excel VBAでは、指定した名前のシートが存在するかどうかを事前に確認することで、エラーを防ぐことができます。
特に Worksheets("シート名") で存在しないシートを指定すると 実行時エラー9 が発生するため、安全なコーディングには欠かせないテクニックです。

本記事では、シートの存在確認方法を複数パターンで解説します。


1. 基本構文:Functionで存在を判定

最もよく使われる方法は、指定したシート名が存在するかどうかをFunctionで返す形です。

Function SheetExists(ByVal sheetName As String) As Boolean
On Error Resume Next
SheetExists = Not Worksheets(sheetName) Is Nothing
On Error GoTo 0
End Function

使用例:

Sub TestSheetExists()
If SheetExists("Data") Then
MsgBox "シート「Data」は存在します。"
Else
MsgBox "シート「Data」は存在しません。"
End If
End Sub

2. ループで確認する方法

Worksheetsコレクションをループして、シート名を1つずつ確認する方法です。
こちらは On Error を使わないため、エラー制御が苦手な方でも扱いやすいです。

Function SheetExistsLoop(ByVal sheetName As String) As Boolean
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name = sheetName Then
SheetExistsLoop = True
Exit Function
End If
Next ws
SheetExistsLoop = False
End Function

3. 実用例:存在する場合のみアクティブ化

存在する場合だけシートをアクティブにする処理例です。

Sub ActivateIfExists()
Dim targetSheet As String
targetSheet = "Data"

If SheetExists(targetSheet) Then
Worksheets(targetSheet).Activate
Else
MsgBox "シート「" & targetSheet & "」は存在しません。"
End If
End Sub

4. 存在しない場合に新規作成する

存在しなければ自動的に新しいシートを作る処理例です。

Sub CreateIfNotExists()
Dim targetSheet As String
targetSheet = "Report"

If Not SheetExists(targetSheet) Then
Worksheets.Add.Name = targetSheet
MsgBox "シート「" & targetSheet & "」を新規作成しました。"
Else
MsgBox "シート「" & targetSheet & "」は既に存在します。"
End If
End Sub

5. まとめ

  • On Error Resume Next を使う方法が最もシンプル
  • ループ処理で確認する方法はエラー制御を使わないため安全
  • 存在確認はシート操作の前に必ず入れておくとトラブル防止になる

コメント

タイトルとURLをコピーしました