〖ExcelVBA〗指定したシートが存在するかチェックする基本コード|エラーを防ぐ定番マクロ

ExcelVBA

ExcelVBAでよくあるエラーの1つが、存在しないシート名を指定してしまうパターンです。

たとえば、次のようなコードを書いたときに…

Worksheets("集計").Range("A1").Value = "OK"

もし「集計」というシートがなければ、マクロは途中で止まり、エラーになります。

そこで役に立つのが、今回紹介する「シートが存在するかチェックする基本コード」です。
これを入れておくだけで、シート名のミスや削除によるトラブルをかなり減らせます。


スポンサーリンク
スポンサーリンク

この記事でできること

  • 指定したシートが存在するかを事前にチェックできる
  • 存在しない場合は、エラーを出さずに処理を止められる
  • 存在しない場合に、シートを自動で作ることもできる

基本:シートの存在チェック関数(コピペOK)

まずは一番よく使う「存在チェック用の関数」です。
標準モジュールに貼り付けて使います。

Option Explicit

' 指定したシートが存在するかチェックする関数
Public Function SheetExists(ByVal sheetName As String, Optional ByVal wb As Workbook) As Boolean

    Dim ws As Worksheet

    If wb Is Nothing Then
        Set wb = ThisWorkbook
    End If

    On Error Resume Next
    Set ws = wb.Worksheets(sheetName)
    On Error GoTo 0

    SheetExists = Not (ws Is Nothing)

End Function

使い方:存在する場合だけ処理する

たとえば「集計」シートがあるときだけ書き込みたい場合は、こうします。

Sub WriteIfSheetExists()

    If SheetExists("集計") Then
        Worksheets("集計").Range("A1").Value = "シートがあったので書き込みました"
    Else
        MsgBox "『集計』シートが見つかりません。", vbExclamation
    End If

End Sub

これで、シートが存在しない場合でもエラーにならず、メッセージを出して終われます。


応用:無ければ自動で作ってから処理する

「シートが無ければ作る」という実務パターンも多いです。
以下は、無ければ新規作成してから処理を続ける例です。

Sub CreateSheetIfNotExists()

    Dim ws As Worksheet

    If Not SheetExists("集計") Then
        Set ws = Worksheets.Add(After:=Worksheets(Worksheets.Count))
        ws.Name = "集計"
    Else
        Set ws = Worksheets("集計")
    End If

    ws.Range("A1").Value = "準備OK"

End Sub

初心者がつまずきやすいポイント

① シート名の全角・半角やスペース

「集計 」のように、末尾にスペースが入っているだけでも別名扱いになります。
シート名が一致しているかは注意が必要です。

② ThisWorkbook と ActiveWorkbook の違い

今回の関数は、特に指定がなければ ThisWorkbook(マクロが入っているブック)を対象にしています。
別ブックを対象にしたい場合は、引数にWorkbookを渡せます。

Sub CheckOtherWorkbook()

    Dim wb As Workbook
    Set wb = ActiveWorkbook

    If SheetExists("集計", wb) Then
        MsgBox "アクティブブックに『集計』シートがあります。"
    End If

End Sub

まとめ:シート存在チェックは“安全なVBA”の第一歩

VBAは、ちょっとした条件違い(シート名の変更・削除など)でエラー停止しやすいです。
今回のような基本チェックコードを最初に入れておくと、実務でも安心して使えるマクロになります。

  • シートがある前提のコードは危険
  • 存在チェックを入れると、エラー停止を防げる
  • 無ければ作る処理も簡単に書ける

ぜひ、あなたのVBAテンプレ(定番部品)として使ってみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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