プログラミング

【PR】を含みます。

【VBA】確認メッセージを表示せずにシートを削除する方法

VBA 確認メッセージを表示せずにシートを削除する方法

VBAで確認メッセージを表示せずにシートを削除する方法を解説します。

配列(array)を使用して複数のシートを削除する方法や特定のシート以外を削除する方法も紹介します。

Excelでシートを削除するときの注意事項

エクセルでは、すべてのシートを削除することはできません。

最低でも1つのシートを残しておく必要があります。

VBA(Visual Basic for Applications)を使ってシートを削除するコードを書いた場合でも、最後のシートは削除できないように設計されています。

【実装コード】確認メッセージを表示せずにシートを削除

以下のコードは、シート名「Sheet1」を削除しています。

実際に使用する際は、Sheet1を削除したいシート名に置き換える必要があります。

VBA
Copy
  1. Sub sample()
  2.     Dim sheetName As String
  3.     sheetName = "Sheet1" ' 削除したいシートの名前を入力
  4.     Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
  5.     On Error Resume Next ' エラーハンドリング
  6.     ThisWorkbook.Sheets(sheetName).Delete
  7.     On Error GoTo 0 ' エラーハンドリングを解除
  8.     Application.DisplayAlerts = True ' 確認ダイアログを再表示する
  9. End Sub

コード解説

  1. sheetName

    削除したいシートの名前を指定します。

  2. Application.DisplayAlerts = False

    削除確認ダイアログを表示しないようにする設定です。

  3. On Error Resume Next

    エラーが発生しても次の行に進むための設定です。

  4. ThisWorkbook.Sheets(sheetName).Delete

    指定した名前のシートを削除します。

  5. On Error GoTo 0

    エラーハンドリングを解除します(On Error Resume Nextの設定を解除します)。

【実装コード】複数のシートを削除

以下のコードは、シート名「Sheet1」「Sheet2」を配列に指定して削除しています。

実際に使用する際は、Sheet1Sheet2を削除したいシート名に置き換える必要があります。

VBA
Copy
  1. Sub sample()
  2.     ' 削除したいシートの名前を配列に入力
  3.     Dim sheetNames As Variant
  4.     sheetNames = Array("Sheet1", "Sheet2")
  5.     Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
  6.     On Error Resume Next ' エラーハンドリング
  7.     ' 配列内の各シートをループして削除
  8.     Dim sheetName As Variant
  9.     Dim sheet As Worksheet
  10.     For Each sheetName In sheetNames
  11.         Set sheet = ThisWorkbook.Sheets(sheetName)
  12.         If Not sheet Is Nothing Then
  13.             sheet.Delete
  14.         End If
  15.     Next sheetName
  16.     On Error GoTo 0 ' エラーハンドリングを解除
  17.     Application.DisplayAlerts = True ' 確認ダイアログを再表示する
  18. End Sub

【実装コード】特定のシート以外を削除

以下のコードはシート名「Sheet1」「Sheet2」を配列に指定して、シート名「Sheet1」「Sheet2」以外のシートを削除しています。

実際に使用する際は、Sheet1Sheet2を削除したくないシート名に置き換える必要があります。

VBA
Copy
  1. Sub sample()
  2.     ' 保持したいシートの名前を配列に入力
  3.     Dim keepSheets As Variant
  4.     keepSheets = Array("Sheet1", "Sheet2") ' ここに保持したいシート名を記入
  5.     Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
  6.     ' 全シートをループ
  7.     Dim sheet As Worksheet
  8.     Dim keepSheet As Variant
  9.     Dim deleteSheet As Boolean
  10.     For Each sheet In ThisWorkbook.Sheets
  11.         deleteSheet = True ' 初期設定は削除
  12.         ' シート名が保持するリストにあるかをチェック
  13.         For Each keepSheet In keepSheets
  14.             If sheet.Name = keepSheet Then
  15.                 deleteSheet = False ' 保持するシートなので削除しない
  16.                 Exit For
  17.             End If
  18.         Next keepSheet
  19.         ' 削除するシートの場合、削除を実行
  20.         If deleteSheet Then
  21.             sheet.Delete
  22.         End If
  23.     Next sheet
  24.     Application.DisplayAlerts = True ' 確認ダイアログを再表示する
  25. End Sub

実務で使用しやすいようにシート削除を関数化

VBA
Copy
  1. Public Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)
  2.     Dim targetSheets As Variant
  3.     If IsArray(sheetNames) Then
  4.         ' sheetNamesが配列の場合
  5.         targetSheets = sheetNames
  6.     Else
  7.         ' sheetNamesが配列でない場合
  8.         targetSheets = Array(sheetNames)
  9.     End If
  10.     Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
  11.     Dim targetSheet As Variant
  12.     Dim sheet As Worksheet
  13.     If keepSheetsFlag Then
  14.         ' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除
  15.         ' 全シートをループ
  16.         Dim deleteSheet As Boolean
  17.         For Each sheet In ThisWorkbook.Sheets
  18.             deleteSheet = True ' 初期設定は削除
  19.             ' シート名が保持するリストにあるかをチェック
  20.             For Each targetSheet In targetSheets
  21.                 If sheet.Name = targetSheet Then
  22.                     deleteSheet = False ' 保持するシートなので削除しない
  23.                     Exit For
  24.                 End If
  25.             Next targetSheet
  26.             ' 削除するシートの場合、削除を実行
  27.             If deleteSheet Then
  28.                 sheet.Delete
  29.             End If
  30.         Next sheet
  31.     Else
  32.         ' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除
  33.         On Error Resume Next ' エラーハンドリング
  34.         For Each targetSheet In targetSheets
  35.             Set sheet = ThisWorkbook.Sheets(targetSheet)
  36.             If Not sheet Is Nothing Then
  37.                 sheet.Delete
  38.             End If
  39.             Set sheet = Nothing
  40.         Next targetSheet
  41.         On Error GoTo 0 ' エラーハンドリングを解除
  42.     End If
  43.     Application.DisplayAlerts = True ' 確認ダイアログを再表示する
  44. End Function

delete_sheets関数の使用方法

第一引数のsheetNamesに対象となるシート名を指定します。

第二引数のkeepSheetsFlagは必要に応じて指定します。

各引数について

  1. sheetNames (必須)
    対象となるシート名を指定します。
    複数のシートを対象とする場合、配列で指定します。
    対象となるシートが1つの場合、配列か文字列で指定します。

  2. keepSheetsFlag (省略可)
    引数を省略orFalseを指定した場合、sheetNamesで指定したシートが削除されます。
    Trueを指定した場合、sheetNamesで指定したシート以外が削除されます。

【サンプル】delete_sheets関数で特定のシートを削除

以下のコードは、シート名「Sheet1」と「Sheet2」を削除しています。

VBA
Copy
  1. Sub sample()
  2.     Dim sheetList As Variant
  3.     sheetList = Array("Sheet1", "Sheet2")
  4.     Call delete_sheets(sheetList, True)
  5. End Sub
  6. Public Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)
  7.     Dim targetSheets As Variant
  8.     If IsArray(sheetNames) Then
  9.         ' sheetNamesが配列の場合
  10.         targetSheets = sheetNames
  11.     Else
  12.         ' sheetNamesが配列でない場合
  13.         targetSheets = Array(sheetNames)
  14.     End If
  15.     Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
  16.     Dim targetSheet As Variant
  17.     Dim sheet As Worksheet
  18.     If keepSheetsFlag Then
  19.         ' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除
  20.         ' 全シートをループ
  21.         Dim deleteSheet As Boolean
  22.         For Each sheet In ThisWorkbook.Sheets
  23.             deleteSheet = True ' 初期設定は削除
  24.             ' シート名が保持するリストにあるかをチェック
  25.             For Each targetSheet In targetSheets
  26.                 If sheet.Name = targetSheet Then
  27.                     deleteSheet = False ' 保持するシートなので削除しない
  28.                     Exit For
  29.                 End If
  30.             Next targetSheet
  31.             ' 削除するシートの場合、削除を実行
  32.             If deleteSheet Then
  33.                 sheet.Delete
  34.             End If
  35.         Next sheet
  36.     Else
  37.         ' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除
  38.         On Error Resume Next ' エラーハンドリング
  39.         For Each targetSheet In targetSheets
  40.             Set sheet = ThisWorkbook.Sheets(targetSheet)
  41.             If Not sheet Is Nothing Then
  42.                 sheet.Delete
  43.             End If
  44.             Set sheet = Nothing
  45.         Next targetSheet
  46.         On Error GoTo 0 ' エラーハンドリングを解除
  47.     End If
  48.     Application.DisplayAlerts = True ' 確認ダイアログを再表示する
  49. End Function

【サンプル】delete_sheets関数で特定のシート以外を削除

以下のコードは、シート名「Sheet1」と「Sheet2」以外を削除しています。

VBA
Copy
  1. Sub sample()
  2.     Dim sheetList As Variant
  3.     sheetList = Array("Sheet1", "Sheet2")
  4.     Call delete_sheets(sheetList)
  5. End Sub
  6. Public Function delete_sheets(ByVal sheetNames As Variant, Optional ByVal keepSheetsFlag As Boolean = False)
  7.     Dim targetSheets As Variant
  8.     If IsArray(sheetNames) Then
  9.         ' sheetNamesが配列の場合
  10.         targetSheets = sheetNames
  11.     Else
  12.         ' sheetNamesが配列でない場合
  13.         targetSheets = Array(sheetNames)
  14.     End If
  15.     Application.DisplayAlerts = False ' 確認ダイアログを非表示にする
  16.     Dim targetSheet As Variant
  17.     Dim sheet As Worksheet
  18.     If keepSheetsFlag Then
  19.         ' keepSheetsFlagがTrueの場合、targetSheetsに指定されているシート以外を削除
  20.         ' 全シートをループ
  21.         Dim deleteSheet As Boolean
  22.         For Each sheet In ThisWorkbook.Sheets
  23.             deleteSheet = True ' 初期設定は削除
  24.             ' シート名が保持するリストにあるかをチェック
  25.             For Each targetSheet In targetSheets
  26.                 If sheet.Name = targetSheet Then
  27.                     deleteSheet = False ' 保持するシートなので削除しない
  28.                     Exit For
  29.                 End If
  30.             Next targetSheet
  31.             ' 削除するシートの場合、削除を実行
  32.             If deleteSheet Then
  33.                 sheet.Delete
  34.             End If
  35.         Next sheet
  36.     Else
  37.         ' keepSheetsFlagがFlaseの場合、targetSheetsに指定されているシートを削除
  38.         On Error Resume Next ' エラーハンドリング
  39.         For Each targetSheet In targetSheets
  40.             Set sheet = ThisWorkbook.Sheets(targetSheet)
  41.             If Not sheet Is Nothing Then
  42.                 sheet.Delete
  43.             End If
  44.             Set sheet = Nothing
  45.         Next targetSheet
  46.         On Error GoTo 0 ' エラーハンドリングを解除
  47.     End If
  48.     Application.DisplayAlerts = True ' 確認ダイアログを再表示する
  49. End Function

Excel VBAで初心者を卒業したいという方におすすめの1冊

アイコン画像

もみじ

入門書レベルの内容を理解できる方におすすめの1冊で、実務で必要なスキルを学ぶことができます。

具体的には、コーディングの作法や効率的なコーディング方法、CSVやWeb上のデータとの連携方法、そしてマクロの高速化などの実務で役立つスキルを学ぶことができます。

-プログラミング
-,