もくじ
VBAで確認メッセージを表示せずにシートを削除する方法を解説します。
配列(array)を使用して複数のシートを削除する方法や特定のシート以外を削除する方法も紹介します。
Excelでシートを削除するときの注意事項
エクセルでは、すべてのシートを削除することはできません。
最低でも1つのシートを残しておく必要があります。
VBA(Visual Basic for Applications)を使ってシートを削除するコードを書いた場合でも、最後のシートは削除できないように設計されています。
【実装コード】確認メッセージを表示せずにシートを削除
以下のコードは、シート名「Sheet1」を削除しています。
実際に使用する際は、Sheet1
を削除したいシート名に置き換える必要があります。
Sub sample()
Dim sheetName As String
sheetName = "Sheet1" ' 削除したいシートの名前を入力
Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
On Error Resume Next ' エラーハンドリング
ThisWorkbook.Sheets(sheetName).Delete
On 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 Variant
sheetNames = Array("Sheet1", "Sheet2")
Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
On Error Resume Next ' エラーハンドリング
' 配列内の各シートをループして削除
Dim sheetName As Variant
Dim sheet As Worksheet
For Each sheetName In sheetNames
Set sheet = ThisWorkbook.Sheets(sheetName)
If Not sheet Is Nothing Then
sheet.Delete
End If
Next sheetName
On Error GoTo 0 ' エラーハンドリングを解除
Application.DisplayAlerts = True ' 確認ダイアログを再表示する
End Sub
【実装コード】特定のシート以外を削除
以下のコードはシート名「Sheet1」「Sheet2」を配列に指定して、シート名「Sheet1」「Sheet2」以外のシートを削除しています。
実際に使用する際は、Sheet1
、Sheet2
を削除したくないシート名に置き換える必要があります。
Sub sample()
' 保持したいシートの名前を配列に入力
Dim keepSheets As Variant
keepSheets = Array("Sheet1", "Sheet2") ' ここに保持したいシート名を記入
Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
' 全シートをループ
Dim sheet As Worksheet
Dim keepSheet As Variant
Dim deleteSheet As Boolean
For Each sheet In ThisWorkbook.Sheets
deleteSheet = True ' 初期設定は削除
' シート名が保持するリストにあるかをチェック
For Each keepSheet In keepSheets
If sheet.Name = keepSheet Then
deleteSheet = False ' 保持するシートなので削除しない
Exit For
End If
Next keepSheet
' 削除するシートの場合、削除を実行
If deleteSheet Then
sheet.Delete
End If
Next sheet
Application.DisplayAlerts = True ' 確認ダイアログを再表示する
End Sub
実務で使用しやすいようにシート削除を関数化
Public Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)
Dim targetSheets As Variant
If IsArray(sheetNames) Then
' sheetNamesが配列の場合
targetSheets = sheetNames
Else
' sheetNamesが配列でない場合
targetSheets = Array(sheetNames)
End If
Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
Dim targetSheet As Variant
Dim sheet As Worksheet
If keepSheetsFlag Then
' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除
' 全シートをループ
Dim deleteSheet As Boolean
For Each sheet In ThisWorkbook.Sheets
deleteSheet = True ' 初期設定は削除
' シート名が保持するリストにあるかをチェック
For Each targetSheet In targetSheets
If sheet.Name = targetSheet Then
deleteSheet = False ' 保持するシートなので削除しない
Exit For
End If
Next targetSheet
' 削除するシートの場合、削除を実行
If deleteSheet Then
sheet.Delete
End If
Next sheet
Else
' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除
On Error Resume Next ' エラーハンドリング
For Each targetSheet In targetSheets
Set sheet = ThisWorkbook.Sheets(targetSheet)
If Not sheet Is Nothing Then
sheet.Delete
End If
Set sheet = Nothing
Next targetSheet
On Error GoTo 0 ' エラーハンドリングを解除
End If
Application.DisplayAlerts = True ' 確認ダイアログを再表示する
End Function
delete_sheets関数の使用方法
第一引数のsheetNames
に対象となるシート名を指定します。
第二引数のkeepSheetsFlag
は必要に応じて指定します。
各引数について
sheetNames (必須)
対象となるシート名を指定します。
複数のシートを対象とする場合、配列で指定します。
対象となるシートが1つの場合、配列か文字列で指定します。keepSheetsFlag (省略可)
引数を省略orFalse
を指定した場合、sheetNames
で指定したシートが削除されます。
True
を指定した場合、sheetNames
で指定したシート以外が削除されます。
【サンプル】delete_sheets関数で特定のシートを削除
以下のコードは、シート名「Sheet1」と「Sheet2」を削除しています。
Sub sample()
Dim sheetList As Variant
sheetList = Array("Sheet1", "Sheet2")
Call delete_sheets(sheetList, True)
End Sub
Public Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)
Dim targetSheets As Variant
If IsArray(sheetNames) Then
' sheetNamesが配列の場合
targetSheets = sheetNames
Else
' sheetNamesが配列でない場合
targetSheets = Array(sheetNames)
End If
Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
Dim targetSheet As Variant
Dim sheet As Worksheet
If keepSheetsFlag Then
' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除
' 全シートをループ
Dim deleteSheet As Boolean
For Each sheet In ThisWorkbook.Sheets
deleteSheet = True ' 初期設定は削除
' シート名が保持するリストにあるかをチェック
For Each targetSheet In targetSheets
If sheet.Name = targetSheet Then
deleteSheet = False ' 保持するシートなので削除しない
Exit For
End If
Next targetSheet
' 削除するシートの場合、削除を実行
If deleteSheet Then
sheet.Delete
End If
Next sheet
Else
' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除
On Error Resume Next ' エラーハンドリング
For Each targetSheet In targetSheets
Set sheet = ThisWorkbook.Sheets(targetSheet)
If Not sheet Is Nothing Then
sheet.Delete
End If
Set sheet = Nothing
Next targetSheet
On Error GoTo 0 ' エラーハンドリングを解除
End If
Application.DisplayAlerts = True ' 確認ダイアログを再表示する
End Function
【サンプル】delete_sheets関数で特定のシート以外を削除
以下のコードは、シート名「Sheet1」と「Sheet2」以外を削除しています。
Sub sample()
Dim sheetList As Variant
sheetList = Array("Sheet1", "Sheet2")
Call delete_sheets(sheetList)
End Sub
Public Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)
Dim targetSheets As Variant
If IsArray(sheetNames) Then
' sheetNamesが配列の場合
targetSheets = sheetNames
Else
' sheetNamesが配列でない場合
targetSheets = Array(sheetNames)
End If
Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
Dim targetSheet As Variant
Dim sheet As Worksheet
If keepSheetsFlag Then
' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除
' 全シートをループ
Dim deleteSheet As Boolean
For Each sheet In ThisWorkbook.Sheets
deleteSheet = True ' 初期設定は削除
' シート名が保持するリストにあるかをチェック
For Each targetSheet In targetSheets
If sheet.Name = targetSheet Then
deleteSheet = False ' 保持するシートなので削除しない
Exit For
End If
Next targetSheet
' 削除するシートの場合、削除を実行
If deleteSheet Then
sheet.Delete
End If
Next sheet
Else
' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除
On Error Resume Next ' エラーハンドリング
For Each targetSheet In targetSheets
Set sheet = ThisWorkbook.Sheets(targetSheet)
If Not sheet Is Nothing Then
sheet.Delete
End If
Set sheet = Nothing
Next targetSheet
On Error GoTo 0 ' エラーハンドリングを解除
End If
Application.DisplayAlerts = True ' 確認ダイアログを再表示する
End Function
Excel VBAで初心者を卒業したいという方におすすめの1冊
もみじ
入門書レベルの内容を理解できる方におすすめの1冊で、実務で必要なスキルを学ぶことができます。
具体的には、コーディングの作法や効率的なコーディング方法、CSVやWeb上のデータとの連携方法、そしてマクロの高速化などの実務で役立つスキルを学ぶことができます。