部品_シート削除
DeleteSheet
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 ではなく、原因を示すエラーで止まる 1.0
2026-10-30