もくじ
VBAで確認メッセージを表示せずにシートを削除する方法を解説します。
配列(array)を使用して複数のシートを削除する方法や特定のシート以外を削除する方法も紹介します。
Excelでシートを削除するときの注意事項
エクセルでは、すべてのシートを削除することはできません。
最低でも1つのシートを残しておく必要があります。
VBA(Visual Basic for Applications)を使ってシートを削除するコードを書いた場合でも、最後のシートは削除できないように設計されています。
【実装コード】確認メッセージを表示せずにシートを削除
以下のコードは、シート名「Sheet1」を削除しています。
実際に使用する際は、Sheet1を削除したいシート名に置き換える必要があります。
Sub sample()Dim sheetName As StringsheetName = "Sheet1" ' 削除したいシートの名前を入力Application.DisplayAlerts = False ' 確認ダイアログを非表示にするOn Error Resume Next ' エラーハンドリングThisWorkbook.Sheets(sheetName).DeleteOn Error GoTo 0 ' エラーハンドリングを解除Application.DisplayAlerts = True ' 確認ダイアログを再表示するEnd Sub
コード解説
sheetName
削除したいシートの名前を指定します。
Application.DisplayAlerts = False
削除確認ダイアログを表示しないようにする設定です。
On Error Resume Next
エラーが発生しても次の行に進むための設定です。
ThisWorkbook.Sheets(sheetName).Delete
指定した名前のシートを削除します。
On Error GoTo 0
エラーハンドリングを解除します(
On Error Resume Nextの設定を解除します)。
【実装コード】複数のシートを削除
以下のコードは、シート名「Sheet1」「Sheet2」を配列に指定して削除しています。
実際に使用する際は、Sheet1、Sheet2を削除したいシート名に置き換える必要があります。
Sub sample()' 削除したいシートの名前を配列に入力Dim sheetNames As VariantsheetNames = Array("Sheet1", "Sheet2")Application.DisplayAlerts = False ' 確認ダイアログを非表示にするOn Error Resume Next ' エラーハンドリング' 配列内の各シートをループして削除Dim sheetName As VariantDim sheet As WorksheetFor Each sheetName In sheetNamesSet sheet = ThisWorkbook.Sheets(sheetName)If Not sheet Is Nothing Thensheet.DeleteEnd IfNext sheetNameOn Error GoTo 0 ' エラーハンドリングを解除Application.DisplayAlerts = True ' 確認ダイアログを再表示するEnd Sub
【実装コード】特定のシート以外を削除
以下のコードはシート名「Sheet1」「Sheet2」を配列に指定して、シート名「Sheet1」「Sheet2」以外のシートを削除しています。
実際に使用する際は、Sheet1、Sheet2を削除したくないシート名に置き換える必要があります。
Sub sample()' 保持したいシートの名前を配列に入力Dim keepSheets As VariantkeepSheets = Array("Sheet1", "Sheet2") ' ここに保持したいシート名を記入Application.DisplayAlerts = False ' 確認ダイアログを非表示にする' 全シートをループDim sheet As WorksheetDim keepSheet As VariantDim deleteSheet As BooleanFor Each sheet In ThisWorkbook.SheetsdeleteSheet = True ' 初期設定は削除' シート名が保持するリストにあるかをチェックFor Each keepSheet In keepSheetsIf sheet.Name = keepSheet ThendeleteSheet = False ' 保持するシートなので削除しないExit ForEnd IfNext keepSheet' 削除するシートの場合、削除を実行If deleteSheet Thensheet.DeleteEnd IfNext sheetApplication.DisplayAlerts = True ' 確認ダイアログを再表示するEnd Sub
実務で使用しやすいようにシート削除を関数化
Public Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)Dim targetSheets As VariantIf IsArray(sheetNames) Then' sheetNamesが配列の場合targetSheets = sheetNamesElse' sheetNamesが配列でない場合targetSheets = Array(sheetNames)End IfApplication.DisplayAlerts = False ' 確認ダイアログを非表示にするDim targetSheet As VariantDim sheet As WorksheetIf keepSheetsFlag Then' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除' 全シートをループDim deleteSheet As BooleanFor Each sheet In ThisWorkbook.SheetsdeleteSheet = True ' 初期設定は削除' シート名が保持するリストにあるかをチェックFor Each targetSheet In targetSheetsIf sheet.Name = targetSheet ThendeleteSheet = False ' 保持するシートなので削除しないExit ForEnd IfNext targetSheet' 削除するシートの場合、削除を実行If deleteSheet Thensheet.DeleteEnd IfNext sheetElse' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除On Error Resume Next ' エラーハンドリングFor Each targetSheet In targetSheetsSet sheet = ThisWorkbook.Sheets(targetSheet)If Not sheet Is Nothing Thensheet.DeleteEnd IfSet sheet = NothingNext targetSheetOn Error GoTo 0 ' エラーハンドリングを解除End IfApplication.DisplayAlerts = True ' 確認ダイアログを再表示するEnd Function
delete_sheets関数の使用方法
第一引数のsheetNamesに対象となるシート名を指定します。
第二引数のkeepSheetsFlagは必要に応じて指定します。
各引数について
sheetNames (必須)
対象となるシート名を指定します。
複数のシートを対象とする場合、配列で指定します。
対象となるシートが1つの場合、配列か文字列で指定します。keepSheetsFlag (省略可)
引数を省略orFalseを指定した場合、sheetNamesで指定したシートが削除されます。
Trueを指定した場合、sheetNamesで指定したシート以外が削除されます。
【サンプル】delete_sheets関数で特定のシートを削除
以下のコードは、シート名「Sheet1」と「Sheet2」を削除しています。
Sub sample()Dim sheetList As VariantsheetList = Array("Sheet1", "Sheet2")Call delete_sheets(sheetList, True)End SubPublic Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)Dim targetSheets As VariantIf IsArray(sheetNames) Then' sheetNamesが配列の場合targetSheets = sheetNamesElse' sheetNamesが配列でない場合targetSheets = Array(sheetNames)End IfApplication.DisplayAlerts = False ' 確認ダイアログを非表示にするDim targetSheet As VariantDim sheet As WorksheetIf keepSheetsFlag Then' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除' 全シートをループDim deleteSheet As BooleanFor Each sheet In ThisWorkbook.SheetsdeleteSheet = True ' 初期設定は削除' シート名が保持するリストにあるかをチェックFor Each targetSheet In targetSheetsIf sheet.Name = targetSheet ThendeleteSheet = False ' 保持するシートなので削除しないExit ForEnd IfNext targetSheet' 削除するシートの場合、削除を実行If deleteSheet Thensheet.DeleteEnd IfNext sheetElse' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除On Error Resume Next ' エラーハンドリングFor Each targetSheet In targetSheetsSet sheet = ThisWorkbook.Sheets(targetSheet)If Not sheet Is Nothing Thensheet.DeleteEnd IfSet sheet = NothingNext targetSheetOn Error GoTo 0 ' エラーハンドリングを解除End IfApplication.DisplayAlerts = True ' 確認ダイアログを再表示するEnd Function
【サンプル】delete_sheets関数で特定のシート以外を削除
以下のコードは、シート名「Sheet1」と「Sheet2」以外を削除しています。
Sub sample()Dim sheetList As VariantsheetList = Array("Sheet1", "Sheet2")Call delete_sheets(sheetList)End SubPublic Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)Dim targetSheets As VariantIf IsArray(sheetNames) Then' sheetNamesが配列の場合targetSheets = sheetNamesElse' sheetNamesが配列でない場合targetSheets = Array(sheetNames)End IfApplication.DisplayAlerts = False ' 確認ダイアログを非表示にするDim targetSheet As VariantDim sheet As WorksheetIf keepSheetsFlag Then' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除' 全シートをループDim deleteSheet As BooleanFor Each sheet In ThisWorkbook.SheetsdeleteSheet = True ' 初期設定は削除' シート名が保持するリストにあるかをチェックFor Each targetSheet In targetSheetsIf sheet.Name = targetSheet ThendeleteSheet = False ' 保持するシートなので削除しないExit ForEnd IfNext targetSheet' 削除するシートの場合、削除を実行If deleteSheet Thensheet.DeleteEnd IfNext sheetElse' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除On Error Resume Next ' エラーハンドリングFor Each targetSheet In targetSheetsSet sheet = ThisWorkbook.Sheets(targetSheet)If Not sheet Is Nothing Thensheet.DeleteEnd IfSet sheet = NothingNext targetSheetOn Error GoTo 0 ' エラーハンドリングを解除End IfApplication.DisplayAlerts = True ' 確認ダイアログを再表示するEnd Function
Excel VBAで初心者を卒業したいという方におすすめの1冊

もみじ
入門書レベルの内容を理解できる方におすすめの1冊で、実務で必要なスキルを学ぶことができます。
具体的には、コーディングの作法や効率的なコーディング方法、CSVやWeb上のデータとの連携方法、そしてマクロの高速化などの実務で役立つスキルを学ぶことができます。