こんにちは!Lenocoです。本日も見てくださりありがとうございます。
今回はシート削除を安全に行う関数を作ってみましょう。
シート削除を安全に行う
Excelで「指定のシートを削除したい」「間違えて削除してしまったらどうしよう…」と感じたことはありませんか?
この記事では、VBAを使ってシートを安全に削除する関数を作成する方法を解説します。
コード①(基本のシート削除)
Sub DeleteSheet(sheetName As String)
Application.DisplayAlerts = False
Worksheets(sheetName).Delete
Application.DisplayAlerts = True
End Sub
コードの説明
DisplayAlertsをFalesにすることで確認ダイアログを非表示にします。
確認ダイアログとは、手動で削除するときに表示されるこれです。

マクロ実行時にこちらが表示されないようにし、
シートを削除し、DisplayAlertsを再びTrueにします。
これで指定したシートが削除されます。
ただし、指定したシートが存在しないとエラーが出てしまう点に注意が必要です。
コード②(シートの存在チェック関数)
Function SheetExists(sheetName As String) As Boolean
Dim ws As Worksheet
On Error Resume Next
Set ws = Worksheets(sheetName)
On Error GoTo 0
SheetExists = Not ws Is Nothing
End Function
コードの説明
この関数を使えば、「そのシートがあるか」を確認できます。
Worksheets(sheetName) に存在しないシート名を指定すると、通常はエラーになりますが、
「On Error Resume Next」を使うと、
「もしエラーが出てもスキップして次の行に進む」という動作になります。
「On Error GoTo 0」で、エラー処理を無効にしています(通常の状態にする)。
この関数では指定したシートがなかった場合はFalse、シートがある場合はTrueを返します。
コード③(安全にシート削除)
Sub DeleteSheet(sheetName As String)
If SheetExists(sheetName) Then
Application.DisplayAlerts = False
Worksheets(sheetName).Delete
Application.DisplayAlerts = True
MsgBox "シート「" & sheetName & "」を削除しました。", vbInformation
Else
MsgBox "シート「" & sheetName & "」は存在しません。", vbExclamation
End If
End Sub
コードの説明
②のシートの存在チェック関数を使って、シートを削除しています。
Trueだった場合はシートが存在するので、シート削除をし、
削除した旨のメッセージを表示します。
Falseだった場合はシートが存在しないので、シートは存在しませんとメッセージを出して処理を終了します。
コード④(実行)
Sub TestDelete()
Call DeleteSheet("テストシート")
End Sub
コードの説明
DeleteSheetに削除したいシート名を渡して呼び出します。
さいごに
②③④の3つのコードを使用してシートを安全に削除することができます。
実行するコードは④のようにたった1行で済み、可読性があがりすっきりしますよ!
![]()
Lenoco