【Excel VBA】シートの存在チェック(同名シートの存在チェック)

はじめに

今回は、シートの存在チェックについて解説します。
シートの追加やシート名の変更などを実施する際に、ブック内に同名のブックがあるとエラーとなってしまいます。
そういったエラーを回避する手段としてご使用ください。
なお、本記事では2パターンの存在チェック方法について解説します。ぜひ最後までお付き合いください!

この記事を読むメリット
  • シートの存在チェック(ブック内に同名のシート名があるかをチェックする方法)について解説します。
  • コピペで使える実践的なサンプルコードを掲載しています。

前提

シートの存在チェックには、2つのパターンがあるので解説します。

  • ブック内のシートをループしてチェックする
    ブック内のシートをすべてループして、指定したシート名が無いかをチェックします。
    直観的に理解しやすいソースコードになるため、可読性が良いです。
  • 変数にシートを格納してエラーが出るかをチェックする
    変数にシートを格納する時、存在しないシートを格納しようとするとエラーが発生します。
    上記挙動を逆手に取り、シートの存在を確認します。
    直観的に分かりづらいので可読性は落ちますが、ループが不要となるため処理が速いです。
りゅう

それぞれのパターンのサンプルコードを解説していきます。

サンプルコード

シートの存在チェック(ブック内のシートをループしてチェックする

mainプロシージャから、Active状態のブックに対して Sheet1というシートが無いかをチェックします。

サンプルコード
Public Sub main()
    
    ' Sheet1というシートが存在するかをチェックする
    If checkSheetExist(ActiveWorkbook, "Sheet1") Then

        ' シートが存在する場合
        MsgBox ActiveWorkbook.Name & "に Sheet1が存在します。", vbInformation
    Else

        ' シートが存在する場合
        MsgBox ActiveWorkbook.Name & "に Sheet1が存在しません。", vbInformation
    End If
End Sub
'****************************************************************
'* メソッド名:シート存在チェック
'* 引数:wbObj           … 検索対象のブック
'* 引数:searchSheetName … 検索するシート名
'* 戻り値:シートが存在:True / シートが存在しない:False
'****************************************************************
Private Function checkSheetExist(ByVal wbObj As Workbook, ByVal searchSheetName As String) As Boolean
    Dim wsObj As Worksheet ' Worksheetオブジェクト

    ' 戻り値として False をセット
    checkSheetExist = False

    ' Worksheet分ループする
    For Each wsObj In wbObj.Worksheets

        If wsObj.Name = searchSheetName Then

            ' シート名が一致する場合、Trueを返却してメソッドを抜ける
            checkSheetExist = True
        End If
    Next wsObj
End Function

シートの存在チェック(変数にシートを格納してエラーが出るかをチェックする

mainプロシージャから、Active状態のブックに対して Sheet1というシートが無いかをチェックします。

「On Error Resume Next」を利用して、エラー発生時も無視して進めることにより、存在判定を実施しています。

サンプルコード
Public Sub main()

    ' Sheet1というシートが存在するかをチェックする
    If checkSheetExist(ActiveWorkbook, "Sheet1") Then

        ' シートが存在する場合
        MsgBox ActiveWorkbook.Name & "に Sheet1が存在します。", vbInformation
    Else

        ' シートが存在する場合
        MsgBox ActiveWorkbook.Name & "に Sheet1が存在しません。", vbInformation
    End If
End Sub
'****************************************************************
'* メソッド名:シート存在チェック
'* 引数:wbObj           … 検索対象のブック
'* 引数:searchSheetName … 検索するシート名
'* 戻り値:シートが存在:True / シートが存在しない:False
'****************************************************************
Private Function checkSheetExist(ByVal wbObj As Workbook, ByVal searchSheetName As String) As Boolean
    Dim wsObj As Worksheet ' Worksheetオブジェクト

    ' エラーを無視する設定
    On Error Resume Next

    ' 変数にシートを代入する
    Set wsObj = wbObj.Worksheets(searchSheetName)

    If Err.Number = 0 Then

        ' エラーが発生しない場合(シートが存在)
        checkSheetExist = True
    Else

        ' エラーが発生する場合(シートが存在しない)
        checkSheetExist = False
    End If

    ' エラー無視設定を解除する
    On Error GoTo 0
End Function

最後に

今回は、シートの存在チェックについて解説しました。
シートの追加やシート名の変更などを実施する際には必ず実施しましょう。

2つのパターンをご紹介しましたが、処理的な速さはほとんど変わらない為、個人的には サンプルコード – シートの存在チェック(ブック内のシートをループしてチェックする)が好きです。

本記事が、皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメント一覧 (1件)

コメントする

CAPTCHA