Excel VBA

【Excel VBA】【マクロ】【Tips】シート削除を安全に行う関数を作ろう

こんにちは!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

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です