日本語名

部品_シート削除

英語名

DeleteSheet

URL

https://feelcodelab.com/vba_parts/deletesheet/

用途

・指定したシート(Worksheet)を、削除する
・削除の確認メッセージは、この部品の中だけで、止める(削除の直前に止めて、直後に、元の設定へ戻す)
※ この部品は Sub(プロシージャ)ではなく「Function(関数)」で、成功/失敗を Boolean で返す

基礎区分

土台

用途区分

処理

操作対象区分

シート

前提条件

・【最重要】この部品は Function(関数)であり、戻り値(Boolean)を返す
  → 削除できた場合は True、実行時にできなかった場合は False(この場合は、エラーでは止まらない)
  → 呼び出し側は、必ず戻り値を確認してから後続処理を行い、メッセージも呼び出し側で表示する
    (False のときは、MsgBox のあとに Exit Sub まで書く)
・【最重要】削除は、元に戻せない。確認メッセージも、出ない
  → 削除してよいシートかを、呼び出し側で、必ず確認する(例:シート名を、シート存在チェックで確認してから、取得する)
  → 削除したシートを指していた数式は、#REF! になる
・削除するシート(vWs)は、Worksheet で渡す
  → ブックは、Worksheet が持っているので、ブックの引数は不要
  → 削除したあとは、その Worksheet 変数は、使えない(使うと、エラーになる)
・削除の確認メッセージ(DisplayAlerts)は、この部品の中で、止めて、すぐ戻す
  → 呼び出し前の設定(True か False か)を控えておき、削除の直後(失敗したときも)に、その設定へ戻す
・ブックの中の、表示されているシートが、これ 1 つだけの場合は、削除できず、False を返す(Excel の決まり)
  → また、ブックの構成が、保護されているときも、削除できず、False を返す
・削除できなかった場合(実行時の失敗)は False を返す(原因は、イミディエイトウィンドウに出る)
・非表示のシートも、削除できる
・設定の誤りは、False ではなく、原因を示すエラーで止まる(Err.Raise)
  - シート(vWs)が Nothing(vbObjectError + 1006)
・Offset / Find / Resize / With は禁止

依存関係(部品)

・他の部品を参照しない(土台)
・組み合わせ:シート存在チェック → シート削除
  (削除するシートが、あるかを、先に確認する。ない場合に、シート名で取得すると、エラーになるため)

依存関係(シート)

・対象のシートは、Worksheet で渡す(ブックは、シートが持っているので、ブックの引数は不要)
・ブックの中の、表示されているシートが、これ 1 つだけの場合は、削除できず、False を返す(Excel の決まり)
・削除したシートを参照していた数式は、#REF! になる

引数

vWs         : 削除するシート(Worksheet)

戻り値

Boolean : 削除できた場合は True、実行時にできなかった場合は False

戻り値の型

Boolean

コード全文

Function 部品_シート削除(ByVal vWs As Worksheet) As Boolean

    部品_シート削除 = f_DeleteSheet(vWs)

End Function

Function f_DeleteSheet(ByVal vWs As Worksheet) As Boolean

    Dim prevAlerts As Boolean

    f_DeleteSheet = False

    If vWs Is Nothing Then
        Err.Raise vbObjectError + 1006, "f_DeleteSheet", _
                  "シート(vWs)が設定されていません(Nothing)。"
    End If

    prevAlerts = Application.DisplayAlerts

    On Error GoTo ErrHandler

    Application.DisplayAlerts = False
    vWs.Delete
    Application.DisplayAlerts = prevAlerts

    f_DeleteSheet = True
    Exit Function

ErrHandler:
    Debug.Print "f_DeleteSheet: " & Err.Number & " " & Err.Description
    Application.DisplayAlerts = prevAlerts
    f_DeleteSheet = False

End Function

呼び出し・活用事例

◆例1:作業用のシート「TEMP」を、削除する◆
If 部品_シート存在チェック(ThisWorkbook, "TEMP") Then
    If 部品_シート削除(ThisWorkbook.Worksheets("TEMP")) = False Then
        MsgBox "シートを削除できませんでした"
        Exit Sub
    End If
End If


※ シートが Nothing の場合は、False ではなく、原因を示すエラーで止まる

BASファイル(ダウンロード)

DeleteSheet.bas

バージョン

1.0

更新日

2026-10-30