MENU

【マクロVBA】特定の名前のシートが存在するかを判定してそのシートを削除する

【マクロVBA】特定の名前のシートが存在するかを判定してそのシートを削除する

エクセルで特定の名前のシートだけを削除したい場合があります。

これをマクロで実行できると、とても便利です。

    

そこで今回は、特定の名前のシートが存在するかを判定して、存在する場合はそのシートを削除するマクロを紹介します。

       

目次

【マクロVBA】特定の名前のシートが存在するかを判定してそのシートを削除する

       

今回は「データ」という名前のシートが存在する場合、そのシートを削除するコードを書きました。

      

Sub DeleteDataSheet()
    '「データ」という名前のシートが存在する場合、「データ」シートを削除する
    Dim ws As Worksheet
    Dim sheetFound As Boolean
    sheetFound = False
    
    '「データ」シートが存在するかどうかを調べる
    For Each ws In Worksheets
        If ws.Name = "データ" Then
            sheetFound = True
            Exit For
        End If
    Next ws
    
    '「データ」シートが存在する場合、削除する
    If sheetFound Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
    End If
End Sub

       

「データ」という名前のシートを調べる下準備

    Dim ws As Worksheet
    Dim sheetFound As Boolean
    sheetFound = False

         

説明
  1. Dim ws As Worksheet: wsという名前のWorksheetオブジェクト型の変数を宣言します。この変数は、後のFor Eachループで各シートを参照するために使用されます。

  2. Dim sheetFound As Boolean: sheetFoundという名前のBoolean型の変数を宣言します。この変数は、”データ”という名前のシートがワークブック内に存在するかどうかを示すフラグとして使用されます。初期値はFalseで、”データ”シートが見つかった場合にTrueに設定されます。

  3. sheetFound = False: sheetFound変数の初期値をFalseに設定します。これにより、デフォルトで”データ”シートが存在しないものとして処理が進みます。”データ”シートが見つかった場合にのみ、この変数はTrueに変更されます。

        

このコードは、”データ”という名前のシートがワークブック内に存在するかどうかを確認するための準備を行っています。

For Eachループで、各シートが”データ”シートであるかどうかを調べ、該当するシートが見つかった場合にsheetFound変数をTrueに設定します。

       

Boolean型の変数は、TrueまたはFalseの2つの値を格納するために使用されます。

これらの値は、論理的な条件が満たされているかどうかを表すために使用されます。

例えば、特定のシートが存在するかどうか、ある値が他の値よりも大きいかどうかなど、条件に基づいて処理を切り替える際に、Boolean型の変数が役立ちます。

       

「データ」という名前のシートが存在するかどうかを調べる

    For Each ws In Worksheets
        If ws.Name = "データ" Then
            sheetFound = True
            Exit For
        End If
    Next ws

       

説明
  1. For Each ws In Worksheets: これは、ワークブック内のすべてのワークシートに対して繰り返し処理を行うFor Eachループを開始します。ws変数には、現在の反復で参照されているワークシートが割り当てられます。

  2. If ws.Name = "データ" Then: この行は、現在のワークシート(ws)の名前が”データ”であるかどうかをチェックする条件分岐を開始します。もしws.Nameが”データ”と等しい場合、次の行のコードが実行されます。

  3. sheetFound = True: この行は、sheetFound変数をTrueに設定します。これにより、”データ”という名前のシートがワークブック内に存在することが示されます。

  4. Exit For: この行は、Exit Forステートメントを使用して、For Eachループを強制的に終了します。これにより、”データ”シートが見つかった時点で、それ以上のワークシートを調べることなくループを抜けることができます。

  5. End If: この行は、Ifステートメントの終わりを示します。この行に到達した場合、次のワークシートに進みます(ループが終了していない場合)。

  6. Next ws: この行は、For Eachループの終わりを示します。次のワークシートに進み、ループを続けます。すべてのワークシートが処理されると、この行の後のコードに進みます。

      

このコードブロックの目的は、ワークブック内に”データ”という名前のシートが存在するかどうかを調べ、その情報をsheetFound変数に格納することです。

シートが見つかった場合、ループは早期終了し、以降のコードで適切な処理が行われます。

       

「データ」シートが存在する場合、削除する

    If sheetFound Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
    End If

       

説明
  1. If sheetFound Then: この行は、sheetFound変数がTrueであるかどうかをチェックする条件分岐を開始します。sheetFoundTrueである場合、つまり「データ」という名前のシートが存在する場合、次の行のコードが実行されます。

  2. Application.DisplayAlerts = False: この行は、ExcelのアプリケーションオブジェクトのDisplayAlertsプロパティをFalseに設定します。これにより、ユーザーに表示される警告メッセージ(シートの削除時に表示される確認ダイアログなど)が一時的に無効化されます。

  3. ws.Delete: この行は、「データ」という名前のシートを削除します。先のFor Eachループで見つかったシートはws変数に格納されているため、ws.Deleteを呼び出すことでシートを削除できます。

  4. Application.DisplayAlerts = True: この行は、ExcelのアプリケーションオブジェクトのDisplayAlertsプロパティを元に戻し、Trueに設定します。これにより、警告メッセージが再び表示されるようになります。

  5. End If: この行は、Ifステートメントの終わりを示します。この行に到達した場合、条件分岐が終了し、以降のコードに進みます。

      

このコードブロックの目的は、「データ」という名前のシートが存在する場合にそれを削除することです。

sheetFound変数がTrueの場合にのみ削除処理が実行され、削除中に表示される警告メッセージは無効化されています。

      

ちなみにIf sheetFound ThenIf sheetFound = True Then は、両方が同じ意味を持ちます。

sheetFoundBoolean 型の変数であり、True または False の値しか持ちません。If ステートメントは条件が True である場合に実行されます。

      

If sheetFound Then の形式を使用すると、コードが短くなり、読みやすくなります。

sheetFoundTrue の場合に実行することが自明であるため、= True を省略しても問題ありません。実際、多くのプログラマーは、このような簡潔な表現を好みます。

    

ただし、If sheetFound = True Then の形式を使用しても問題ありませんし、一部のプログラマーは、この形式の方が意図が明確であると感じるかもしれません。

どちらの形式を使用するかは、主に個人の好みやコーディングスタイルによります。

        

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

コメント

コメントする

目次