📊 Excel VBA Top100
📋

DeleteSheet

シート管理

指定したシートを削除する

指定したワークシートをVBAで削除するマクロです。Worksheets("シート名").Deleteメソッドで特定のシートを削除でき、Application.DisplayAlertsをFalseにすることで確認メッセージをスキップできます。シート名のリストをループして複数シートを一括削除したり、条件に合致するシートだけを削除するロジックも実装できます。誤削除防止のため削除前確認ロジックを組み込むことが推奨されます。内部ではDisplayAlertsをFalseにしてからDeleteメソッドを呼び出し、処理後に必ずTrueへ戻す構成が定石です。DeleteEmptySheetsが「空かどうか」で自動判定するのに対し、本マクロは名前や条件を指定して狙ったシートだけを削除する点が異なり、両者を使い分けることでシート整理作業全体を柔軟に自動化できます。

DeleteSheet デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 実行するとシート名を選択するダイアログが表示され、確認後に削除される

🎯 活用シーン

  • ✓月次処理後の一時作業シートを処理完了後に自動削除
  • ✓特定の命名規則のシート(例:「一時_」で始まる)を一括削除
  • ✓レポート生成後に不要になったデータ取込シートを削除
  • ✓バッチ処理で使用した一時的な作業用シートを、処理完了後に確実に削除したいとき
  • ✓毎月使い捨てで作成する下書きシートを、月次処理の最後に自動クリーンアップしたいとき

💡 実装のヒント

  • ▸Application.DisplayAlerts = Falseで確認ダイアログをスキップできます
  • ▸削除後は必ずApplication.DisplayAlerts = Trueに戻します
  • ▸On Errorでシートが存在しない場合のエラーを回避できます
  • ▸削除前に確認メッセージ(MsgBox)を挟むことで、誤操作による重要シートの削除を防げます。
  • ▸命名規則に基づく一括削除を行う場合は、対象シート名を配列にまとめてFor Eachでループ処理すると安全です。

💻 VBAコード

' DeleteSheet
' -----------------
' Macro Name: DeleteSheet
' Description: 指定したシートを削除する
' Parameters: なし
' Returns: なし
' Usage: 実行するとシート名を選択するダイアログが表示され、確認後に削除される
' -----------------

Sub DeleteSheet()
    Dim ws As Worksheet
    Dim sheetName As String
    Dim sheetList As String
    Dim i As Long

    On Error GoTo ErrorHandler

    If Worksheets.Count = 1 Then
        MsgBox "最後のシートは削除できません。", vbExclamation
        Exit Sub
    End If

    For i = 1 To Worksheets.Count
        sheetList = sheetList & i & ": " & Worksheets(i).Name & vbCrLf
    Next i

    sheetName = InputBox("削除するシート番号を入力してください:" & vbCrLf & vbCrLf & sheetList, "シート削除")

    If sheetName = "" Then
        Exit Sub
    End If

    If IsNumeric(sheetName) Then
        i = CLng(sheetName)
        If i >= 1 And i <= Worksheets.Count Then
            Set ws = Worksheets(i)
        Else
            MsgBox "無効な番号です。", vbExclamation
            Exit Sub
        End If
    Else
        On Error Resume Next
        Set ws = Worksheets(sheetName)
        On Error GoTo ErrorHandler
        If ws Is Nothing Then
            MsgBox "「" & sheetName & "」は存在しません。", vbExclamation
            Exit Sub
        End If
    End If

    If MsgBox("「" & ws.Name & "」を削除しますか?" & vbCrLf & "この操作は元に戻せません。", vbYesNo + vbExclamation) = vbYes Then
        Application.DisplayAlerts = False
        ws.Delete
        Application.DisplayAlerts = True
        MsgBox "シートを削除しました。", vbInformation
    End If
    Exit Sub

ErrorHandler:
    Application.DisplayAlerts = True
    MsgBox "エラーが発生しました: " & Err.Description, vbCritical
End Sub