【2026年7月最新】VBAでシートを削除する完全ガイド|アクティブシート・名前指定・複数シート・警告非表示・全シートループ削除まで実践コード集

【2026年7月最新】VBAでシートを削除する完全ガイド|アクティブシート・名前指定・複数シート・警告非表示・全シートループ削除まで実践コード集

「VBAで特定のシートを削除したい」「毎回表示される確認ダイアログを消したい」「特定の名前のシートだけループで削除したい」——Excelブックのシート管理でよく発生する作業です。

この記事ではWorksheet.Deleteの基本から、DisplayAlertsによる警告ダイアログ非表示・複数シートの同時削除・条件付きループ削除・シート存在確認付き削除まで、実務でそのまま使える実践コードを完全解説します。

代表菅澤 代表菅澤
月次レポートを作成する際に「前月の集計シートを削除してから今月分を作る」という作業は定期的に発生します。手作業では確認ダイアログのOKを何度もクリックする必要がありますが、VBAマクロで自動化すれば確認不要・ワンクリックで完結します。
AI鬼管理山崎 AI鬼管理山崎
VBAでシートを削除する際に注意が必要なのが「最後の1枚は削除できない」制約と「確認ダイアログをスキップするApplication.DisplayAlerts」の使い方です。この記事ではそれらの落とし穴も含めて解説します。
✔️ActiveSheet.Deleteでアクティブシートを削除できる
✔️Worksheets("名前").Deleteでシート名を指定して削除できる
✔️Application.DisplayAlerts = Falseで確認ダイアログをスキップできる
✔️複数シートを同時削除するArray指定の方法が分かる
✔️For Eachループで条件に一致するシートを自動削除できる
✔️シート存在確認のエラー回避コードが書ける
✔️Claude CodeでVBAシート削除コードを日本語指示で自動生成できる
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年7月最新】VBAでシートを削除する完全ガイド|アクティブシート・名前指定・複数シート・警告非表示・全シートループ削除まで実践コード集
VBAでシートを削除する方法を完全解説。ActiveSheet.Delete・Worksheets名前指定・複数シート同時削除・DisplayAlerts警告非表示・条件付きループ削除・シートが存在するか確認してから削除する方法まで実践コード付きで解説。

01 VBAでアクティブシートを削除する(ActiveSheet.Delete) 現在選択中のシートを削除する最も基本的なコード

VBAでシートを削除するにはWorksheet.Deleteメソッドを使います。最も基本的な形はActiveSheet.Deleteで、現在アクティブ(選択されている)シートを削除します。

📚 用語解説

ActiveSheet(アクティブシート):VBAで「現在表示・選択されているシート」を参照するプロパティ。「ActiveSheet.Delete」でアクティブなシートを削除します。複数のシートが選択されている場合は全て削除されます。実行前に「現在どのシートがアクティブか」を確認してから実行することが重要です。誤ったシートを削除しないよう、通常は名前を指定して削除する方法のほうが安全です。

'--- アクティブシートを削除する基本コード --- Sub DeleteActiveSheet() ActiveSheet.Delete 'アクティブシートを削除(確認ダイアログが表示される) End Sub
⚠️シートを削除すると元に戻せません

VBAのシート削除は「元に戻す(Ctrl+Z)」が効きません。一度実行すると削除したシートのデータは復元できません。重要なデータが含まれるシートを削除する前は、必ずブックを別名保存するかバックアップを取ってください。マクロでシートを削除する場合は確認ダイアログを表示させておくか、削除前に「本当に削除しますか?」の確認メッセージをMsgBoxで表示する実装を推奨します。

02 シートを名前・インデックス番号で指定して削除する Worksheets("Sheet1").Delete とWorksheets(3).Deleteの使い分け

アクティブシート削除より安全な方法が、シート名またはインデックス番号で削除対象を明示的に指定する方法です。誤ったシートを削除するリスクを減らせます。

📚 用語解説

Worksheetsコレクション(VBA):ExcelブックのシートをVBAから参照するためのコレクションオブジェクト。「Worksheets("シート名")」でシート名を指定してアクセスします。「Worksheets(1)」のように数値を指定するとインデックス番号(左から何番目か)でアクセスできます。ただしインデックス番号はシートの追加・移動・削除で変わるため、シート名指定のほうが安全です。

'--- 方法1: シート名を指定して削除 --- Sub DeleteByName() Worksheets("Sheet1").Delete '"Sheet1"という名前のシートを削除 Worksheets("月次集計").Delete '日本語名のシートも指定可 End Sub '--- 方法2: インデックス番号を指定して削除(左から何番目か)--- Sub DeleteByIndex() Worksheets(1).Delete '左から1番目のシートを削除 Worksheets(Worksheets.Count).Delete '最後(右端)のシートを削除 End Sub '--- 方法3: Sheetsコレクションを使う(グラフシートも含む)--- Sub DeleteUsingSheets() Sheets("Sheet1").Delete 'Worksheetsと同様(グラフシートも含む) End Sub
指定方法コード例安全性注意点
シート名指定Worksheets("Sheet1").Deleteシート名を正確に入力する必要あり
インデックス番号Worksheets(1).Deleteシートの追加・移動で番号が変わる
ActiveSheetActiveSheet.Delete最低実行時の状況によって削除対象が変わる

03 警告ダイアログを非表示にして削除する(DisplayAlerts) Application.DisplayAlerts = FalseでOKクリック不要のシート削除

VBAでシートを削除しようとすると「このシートは完全に削除されます。続けますか?」という確認ダイアログが表示されます。マクロで自動削除する場合はこのダイアログが表示されるたびにOKをクリックする必要があります。Application.DisplayAlerts = Falseでこのダイアログを非表示にできます。

📚 用語解説

Application.DisplayAlerts(ディスプレイアラート):VBAでExcelの警告・確認ダイアログの表示を制御するプロパティ。「Application.DisplayAlerts = False」で全ての警告を非表示にし、デフォルト動作(「はい」を選んだと見なす)で処理を続行します。シート削除の確認ダイアログを自動スキップするために使います。必ず処理後に「Application.DisplayAlerts = True」で元に戻してください。戻し忘れるとマクロ実行後にExcelの警告が全て非表示のままになります。

'--- 警告ダイアログを非表示にしてシートを削除 --- Sub DeleteWithoutAlert() '確認ダイアログを非表示にする Application.DisplayAlerts = False Worksheets("Sheet1").Delete 'ダイアログなしで即座に削除 '必ず最後に元に戻す(重要!) Application.DisplayAlerts = True End Sub
💡DisplayAlertsの戻し忘れを防ぐOn Error GoToパターン

エラーが発生した場合でもDisplayAlertsを確実にTrueに戻すために、「On Error GoTo Cleanup」パターンを使うと安全です。エラーが起きてもCleanupラベルに飛んでDisplayAlerts = Trueを実行します。業務で使うマクロにはこのパターンを標準装備しておくことを推奨します。

'--- エラーセーフなDisplayAlerts制御パターン --- Sub DeleteSafe() On Error GoTo Cleanup 'エラー時にCleanupへ飛ぶ Application.DisplayAlerts = False Worksheets("作業シート").Delete Cleanup: Application.DisplayAlerts = True '必ずTrueに戻す End Sub
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 複数のシートを同時に削除する Array指定で複数シートを1回のDeleteで削除するテクニック

複数のシートを削除する場合、1枚ずつDeleteを繰り返す方法の他に、Array()で複数のシート名を指定して1回のDeleteで一括削除する方法があります。

'--- 複数シートをArrayで一括削除 --- Sub DeleteMultipleSheets() Application.DisplayAlerts = False 'シート名のArrayを渡して一括削除 Worksheets(Array("Sheet1", "Sheet2", "作業用")).Delete Application.DisplayAlerts = True End Sub '--- インデックス番号でArrayを指定して削除 --- Sub DeleteMultipleByIndex() Application.DisplayAlerts = False Worksheets(Array(1, 3, 5)).Delete '1・3・5番目のシートを削除 Application.DisplayAlerts = True End Sub

05 条件に一致するシートをループで削除する For Eachを使って「特定の名前で始まる」「特定のタブ色の」シートを自動削除

シート名が「一時_」で始まるシートを全て削除したい、「年月が古い」シートを削除したいなど、条件を指定してシートをループ削除する場合はFor EachDisplayAlertsを組み合わせます。

📚 用語解説

For Each〜Nextループ(VBA):VBAでコレクション(リスト)の全要素を1つずつ処理するループ構文。「For Each ws In Worksheets」でブック内の全シートを1枚ずつwsに代入して処理します。シートの条件判定(ws.Name Like "一時*"等)と組み合わせることで、条件に一致するシートだけを削除できます。ループ中にシートを削除する場合は後述の注意点があります。

'--- パターン1: 名前が"一時"で始まるシートを全て削除 --- Sub DeleteSheetsByName() Dim ws As Worksheet Dim deleteList() As String Dim count As Long '先に削除対象シート名を収集(ループ中削除はNG) count = 0 For Each ws In Worksheets If ws.Name Like "一時*" Then 'Likeで前方一致 ReDim Preserve deleteList(count) deleteList(count) = ws.Name count = count + 1 End If Next ws '収集したリストを削除 If count > 0 Then Application.DisplayAlerts = False Worksheets(deleteList).Delete Application.DisplayAlerts = True MsgBox count & "枚のシートを削除しました。" End If End Sub
⚠️For Eachループ中に直接Deleteするのは危険

For EachループでWorksheetを列挙しながら同時にDeleteを実行すると、コレクションが変化してループが正常に動作しなくなることがあります。安全なパターンは「①For Eachで削除対象のシート名を配列に収集→②ループ外でWorksheets(Array(...)).Deleteで一括削除」の2段階方式です。

06 シートが存在するか確認してから削除する(エラー回避) On Error ResumeとFunction関数でシート存在確認を実装する

削除しようとしたシートが存在しない場合、VBAはエラーを発生させます。本番で使うマクロではシートが存在するかを確認してから削除する処理を入れておくと安全です。

📚 用語解説

On Error Resume Next(VBA):VBAでエラーが発生した場合に、エラーを無視して次の行に進む制御構文。「On Error Resume Next」の後にエラーが起きそうな処理を書き、「If Err.Number <> 0」でエラーが発生したかを確認します。シートの存在確認では、存在しないシートにアクセスしようとするとエラーが発生するため、このエラーをキャッチしてシートの有無を判定します。使用後は「On Error GoTo 0」でエラー処理を元に戻すことを忘れずに。

'--- シート存在確認関数(汎用) --- 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 '--- 存在確認してから削除 --- Sub DeleteIfExists() Dim sheetName As String sheetName = "作業シート" If SheetExists(sheetName) Then Application.DisplayAlerts = False Worksheets(sheetName).Delete Application.DisplayAlerts = True MsgBox "シート[" & sheetName & "]を削除しました。" Else MsgBox "シート[" & sheetName & "]は存在しません。" End If End Sub
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 シート削除の実践パターン集 「特定シート以外を全削除」「古い月のシートを削除」などよく使うパターン

実務でよく使うシート削除パターンを集めました。コピーしてそのまま使えます。

'--- パターン1: 指定した1枚のシート以外を全て削除 --- Sub DeleteAllExceptOne() Dim ws As Worksheet Dim keepName As String keepName = "マスター" '残すシート名 Application.DisplayAlerts = False Dim i As Long For i = Worksheets.Count To 1 Step -1 '逆順でループ If Worksheets(i).Name <> keepName And Worksheets.Count > 1 Then Worksheets(i).Delete End If Next i Application.DisplayAlerts = True End Sub '--- パターン2: 非表示シートを全て削除 --- Sub DeleteHiddenSheets() Dim ws As Worksheet Dim deleteList() As String Dim cnt As Long cnt = 0 For Each ws In Worksheets If ws.Visible = xlSheetHidden Then ReDim Preserve deleteList(cnt) deleteList(cnt) = ws.Name cnt = cnt + 1 End If Next ws If cnt > 0 Then Application.DisplayAlerts = False Worksheets(deleteList).Delete Application.DisplayAlerts = True End If End Sub

08 Claude CodeでVBAシート削除コードを自動生成する 日本語でシート削除の条件を伝えるだけで完成する実践手順

シート削除のVBAは「どのシートを残すか」「エラー時の処理をどうするか」「DisplayAlertsを戻し忘れないか」など注意点が多いです。Claude Codeに削除条件を日本語で伝えるだけで、これらの安全策込みのコードを自動生成できます。

削除条件を日本語で伝える
「"作業用"で始まるシートを警告なしで全削除して」
安全策込みのコード生成
DisplayAlerts・存在確認・エラー処理付き
VBEに貼り付け実行
Alt+F11でVBEを開く
シート削除完了
ダイアログなしで即完了
✔️「"一時_"で始まる名前のシートを全部削除するVBAを書いて。確認ダイアログは出ないようにして」
✔️「シートが存在するか確認してから削除するVBAを書いて。存在しない場合はメッセージを出して」
✔️「マスターシート以外の全てのシートを削除するVBAを書いて。最後の1枚は削除できないのでその対策も入れて」
✔️「非表示シートを全て削除するVBAを書いて」
✔️「このシート削除コードにエラー処理を追加して。DisplayAlertsが確実にTrueに戻るようにして」

Excel・VBAの定型業務をClaude Code×AI鬼管理で自動化

シート削除・データ整理・レポート生成など、毎月発生するExcel定型業務をClaude Codeを活用したVBAマクロで自動化する方法を無料でご相談いただけます。

AI鬼管理山崎 AI鬼管理山崎
「月次処理でこのシートを削除して新しいシートを作るのが毎月面倒」「条件に合うシートだけ残したい」——このような業務上の要件をそのまま伝えていただければ、VBAコードを自動生成します。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. VBAでシートを削除しようとすると確認ダイアログが毎回表示されます。非表示にするには?

A. 「Application.DisplayAlerts = False」を削除処理の前に設定すると確認ダイアログが表示されなくなります。処理後は必ず「Application.DisplayAlerts = True」で元に戻してください。DisplayAlertsをFalseにすると全ての警告・確認ダイアログが非表示になるため、戻し忘れると他の操作での確認も出なくなります。

Q. VBAでシートを削除すると「最低1枚のシートが必要です」というエラーが出ます。

A. Excelブックは必ず1枚以上のシートが必要なため、ブックの最後の1枚は削除できません。複数シートを削除するループ処理では「Worksheets.Count > 1」の条件チェックを入れて、最後の1枚になったら削除しないようにしてください。「If Worksheets(i).Name <> keepName And Worksheets.Count > 1 Then」のような形で判定します。

Q. VBAでFor Eachループ中にシートを削除すると正しく動作しません。

A. For Eachコレクションを変更(削除等)しながらループすることはVBAでは推奨されません。安全なパターンは「①For Eachで削除対象のシート名を配列(String配列)に収集→②ループ完了後にWorksheets(配列).Deleteで一括削除」の2段階方式です。または逆順の「For i = Worksheets.Count To 1 Step -1」ループを使う方法もあります。

Q. 特定のシートが存在するかどうかをVBAで確認するにはどうすればいいですか?

A. SheetExistsのような関数を作るのが定番です。「On Error Resume Next: Set ws = Worksheets(名前): On Error GoTo 0: SheetExists = Not (ws Is Nothing)」の形で実装します。これをIf文で使って「If SheetExists("シート名") Then: Worksheets("シート名").Delete: End If」と書けば、存在しない場合のエラーを回避できます。

Q. VBAで特定の文字列を含むシートを全て削除するにはどうすればいいですか?

A. For Eachで全シートを走査し、Like演算子かInStr関数でシート名を判定します。「If ws.Name Like "*一時*" Then」で「一時」を含むシートを検出できます。Likeは「*(ワイルドカード)」で部分一致を表し、「一時*」は前方一致、「*一時」は後方一致、「*一時*」は部分一致になります。収集したシート名を配列に入れてWorksheets(配列).Deleteで一括削除します。

Q. VBAのシート削除はCtrl+Zで元に戻せますか?

A. VBAのシート削除はExcelの「元に戻す」(Ctrl+Z)には対応していません。一度VBAでシートを削除すると、そのシートのデータは復元できません。重要なデータを含むシートを削除する前は、必ずブックを別名保存するかバックアップを作成してください。マクロの実行前に「Are you sure?」などの確認MsgBoxを表示する安全設計も推奨します。

シート削除のよくあるミスと対処法まとめ

よくあるミス 発生するエラー 正しい対処法
シート名を誤字・大文字小文字違いで指定実行時エラー9「インデックスが有効範囲にありません」SheetExists関数で存在確認→削除
最後の1枚を削除しようとした「ブックには最低1枚のシートが必要です」Worksheets.Count > 1の条件チェックを追加
DisplayAlertsをFalseに戻し忘れた以降のExcel操作で確認ダイアログが出なくなるOn Error GoTo CleanupでTrueを確実に実行
For Eachループ中に直接Delete削除漏れや実行時エラーが発生削除対象を配列収集→ループ外で一括Delete
インデックス番号指定(シートを移動すると番号変化)意図しないシートを削除シート名指定に変更(より安全)

VBAのシート削除でエラーが発生したとき、エラー番号9(インデックスが有効範囲にありません)はシート名の誤りが最も多い原因です。デバッグ時はVBEのイミディエイトウィンドウ(Ctrl+G)で「?Worksheets.Count」や「?Worksheets(1).Name」を実行してシート名を確認することができます。また、削除前に「Debug.Print ws.Name」でシート名を出力してから削除対象を確認する習慣をつけると、誤削除を防ぎやすくなります。

さらに実務的な応用として、削除前にシートの内容を別ブックにコピーしてからDeleteを実行するバックアップ削除パターンもあります。「Worksheets("作業シート").Copy Before:=Workbooks("backup.xlsx").Worksheets(1)」でシートを別ブックにコピーしてから元のシートを削除すれば、復元が必要な場合にもすぐ対応できます。月次処理で「前月のシートをアーカイブブックに移してから削除する」といった業務フローに活用できます。

VBAでシートを削除する操作は、Excelを使った業務自動化の基本中の基本ですが、DisplayAlertsの制御・ループ中の削除問題・最後の1枚制約など、意外と落とし穴が多い操作でもあります。この記事で解説したパターンを組み合わせることで、月次レポート作成・定期データ更新・ブックの整理作業など、繰り返し発生するExcel業務を安全かつ確実に自動化できます。特に「SheetExists関数」と「DisplayAlertsのエラーセーフ制御」は、実務で使うVBAマクロの定番パターンとして覚えておくと、どんなシート削除の要件にも対応できます。Claude Codeを使えば、こうした安全策込みのコードを日本語で指示するだけで即座に生成できるため、VBAの詳細を覚えていなくても実務に活用できます。

シート削除の前後に処理速度の最適化を行うことも大切です。複数シートを1枚ずつDeleteするよりも、Arrayで一括削除する方が高速です。また大量の処理を行う場合は、Application.ScreenUpdating = Falseで画面更新を止めると、全体の処理が大幅に速くなります。処理完了後はApplication.ScreenUpdating = Trueで必ず元に戻してください。これらの最適化パターンをセットで覚えておくと、シート削除だけでなく様々なVBA処理の高速化に活かせます。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月18日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。