【保存版】VBAでのシート削除&ファイル削除の完全ガイド

ようこそ♪ささぽんのExcel教室へ。
今回は 「VBAでのシート削除とファイル削除」 をテーマにお届けします。
マクロを使ってデータを整理する際、「あとで消すシート」や「処理が終わったファイル」って出てきますよね?
実はそれ、マクロでまとめて自動削除できます!
この記事では、シートとファイルを削除するVBAの基本構文から、実務で使える具体的な例、そしてループ処理との組み合わせによる応用編まで、丁寧に解説します!

この記事は以下のような方におすすめです!
・ファイル削除を自動化したい方
・シート削除を自動化したい方
・ファイルやシートをまとめて削除した方
このブログは「基礎からExcelマクロを学びたいと考えている方」や、
「独学での習得に壁を感じた方」に向けて、やさしく、わかりやすく、丁寧に解説しています。
読み終わるころにはきっと、
「Excelマクロって意外と簡単かも!」「もっとやってみたい!」と思えるはず。
一緒に楽しく学びながら、Excelマクロ使いを目指しましょう!
目次
1.VBAでシートを削除する方法
Excelを使っていて「仮のシート」「一時的に使うシート」を作る場面ってよくありますよね。
処理が終わったあとに、それらを毎回手動で削除するのは地味に手間がかかります。
そんなときに役立つのが、VBAによるシート削除マクロです!
◼︎基本のコード
まずは基本となる、特定のシートを1枚だけ削除するマクロをご紹介します:
Sub DeleteTempSheet()
Application.DisplayAlerts = False
ThisWorkbook.Sheets("TempSheet").Delete
Application.DisplayAlerts = True
End Sub
このコードでは「TempSheet」という名前のシートを削除しています。
Application.DisplayAlerts = Falseという部分で、「本当に削除しますか?」という確認メッセージを非表示にしています。
その上で“TempSheet”を削除するコードを記述し、非表示設定を元に戻すという流れです。
次は、確認メッセージの部分について詳しく見ていきましょう。
◼︎削除時の確認メッセージの設定
Excelでは、シートを削除する際に「このシートを削除してもよろしいですか?」という確認メッセージが表示されます。
これは大切なデータをうっかり消してしまわないための安全措置ですね。
ただし、この確認メッセージが出てしまうと、せっかく自動化をしたにも関わらずボタンだけは手で押すことになってしまいます。
そんなときには、以下のコードで確認メッセージの設定を一時的にオフにして対応しましょう:
Application.DisplayAlerts = False
確認メッセージが出る処理の前にこの一行を記述しておくことで、確認メッセージが出ずに処理されます。
ただしこの設定はExcel全体に適用されるため、注意が必要です。
オフにした設定は以下の一文で戻すことができます:
Application.DisplayAlerts = True
確認メッセージの非表示設定は、基本的にはマクロ実行中のみ有効で、マクロが正常に終わると自動でTrueに戻ります。
ただし、途中でエラーになった場合などに手動でシートを削除したときにも確認メッセージが表示されなくなる可能性があります。
そのため、必要な処理が終わり次第マクロ中に必ず DisplayAlerts=True に戻すことを忘れないようにしましょう。
◼︎削除シートの指定方法
削除したいシート名が毎回決まっている場合には Sheets(“シート名”).Delete で処理ができますが、「名前の一部が決まっている複数のシート」や「条件に合うシートをまとめて削除したい」ケースもありますよね。
そんなときは ループや条件分岐を組み合わせて、削除対象を判定して処理する方法が便利です。
例えば:
Sub DeleteTempSheets()
Dim ws As Worksheet
Application.DisplayAlerts = False
For Each ws In ThisWorkbook.Worksheets
If ws.Name Like "*仮*" Then ws.Delete
Next ws
Application.DisplayAlerts = True
End Sub
この例では、「仮」という文字が入っている名前のシートをすべて削除しています。
Like 演算子を使えば一部の文字列パターンだけに一致するシート名を指定できるので、柔軟なシート指定が可能です。
条件分岐やループ処理については以下の記事で解説していますので、合わせてご確認ください!
【条件分岐】
【ループ処理】
2.基本:VBAでファイルを削除する方法
Excelマクロでは、ファイル操作もマクロで自動化できます。
特に「処理が終わった元ファイルを削除したい」「一時的に保存したCSVファイルを片付けたい」といった場面では、ファイル削除のマクロがとても役立ちます。
◼︎基本のコード
ファイルを削除するには、VBAの Kill 関数を使います。
使い方はとてもシンプルで、削除したいファイルのパスを指定するだけです。
Sub DeleteFile()
Kill "C:\Data\delete.xlsx"
End Sub
このマクロを実行すると、指定された場所にある「delete.xlsx」ファイルが即座に削除されます。
確認メッセージなどは出ずに実行される点が特徴で、誤って実行すると取り返しがつかないため最新の注意を払ってください。
また、ファイルが存在しない場合や使用中の場合はエラーになるため、後ほどご説明するエラー対策や存在チェックと組み合わせて使うのが基本です。
自動処理の中で不要なファイル削除を行うケースでは、Killを正しく使うことで作業の手間とミスを減らすことができます。
◼︎ エラー対策1:ファイルの存在確認
Kill 関数はシンプルで便利ですが、対象ファイルが存在しない場合にはエラーになってしまうので注意が必要です。
そこで大事になるのが削除前の存在確認です。
まずはファイルが存在するかどうかを確認してから削除処理に入るようにしましょう。
Sub DeleteFileIfExists()
Dim filePath As String
filePath = "C:\Data\source.xlsx"
If Dir(filePath) <> "" Then
Kill filePath
Else
MsgBox "ファイルが見つかりませんでした。", vbExclamation
End If
End Sub
ここでは Dir 関数を使って、ファイルが存在するかを確認しています。
Dir(filePath) が空文字でなければ存在していると判断し削除を実行、空文字であればファイルがない旨をメッセージで表示するよう書いています。
◼︎エラー対策2:ファイルが開かれている場合の対策
VBAでファイルを削除しようとするとき、対象ファイルが開かれていると削除に失敗してエラーになります。
つまり、Excelファイルが他のブックやアプリで開かれている状態では Kill 関数は実行できません。
こうしたケースに備えて、「エラーを避け、削除できなかった理由をメッセージ表示する」処理を加えてみましょう。
Sub DeleteFileWithOpenCheck()
Dim filePath As String
filePath = "C:\Data\source.xlsx"
If Dir(filePath) <> "" Then
On Error Resume Next
Kill filePath
If Err.Number <> 0 Then
MsgBox "ファイルを削除できませんでした。開かれていないか確認してください。", vbExclamation
Err.Clear
End If
On Error GoTo 0
Else
MsgBox "ファイルが見つかりませんでした。", vbExclamation
End If
End Sub
このように、On Error Resume Next で一時的にエラーを無視し、Err.Number で削除失敗を検出することで、想定外のエラーでマクロが止まるのを防ぎます。
エラー理由もメッセージで表示されるので分かりやすいですね。
エラー回避の構文については、また別の記事で取り上げる予定なのでお待ちください!
◼︎フォルダ内の複数ファイル削除
VBAでは特定のフォルダ内の複数ファイルを一括で削除することも可能です。
一括削除マクロは、CSVファイルを一時保存しているフォルダをまるごと整理したい場合などに便利です。
例えば:
Sub DeleteAllCsvFiles()
Dim filePath As String
filePath = Dir("C:\Data\Temp\*.csv")
Do While filePath <> ""
Kill "C:\Data\Temp\" & filePath
filePath = Dir()
Loop
End Sub
このコードは、「C:\Data\Temp」内にあるcsvファイルを一括削除するよう指示しています。
Dir 関数は、特定のパターンに一致するファイル名を順に取得する仕組みです。
最初に Dir(“*.csv”) を呼び出して取得しておき、以降は Dir() を使って取得済みのファイルのうち次のファイル名を取得するよう組まれています。
ループ処理として使っているDo Whileの使い方については以下の記事で紹介しています!
今回紹介した構文を使えば、処理が終わった一時ファイルの一括削除や定期的なフォルダ整理の自動化が実現できます。
3.応用:削除条件の工夫と削除内容の記録方法
ここからは、ファイルやシートの削除処理をさらに便利にする応用テクニックを紹介します。
「どのシート/ファイルを削除するかをもっと柔軟に指定したい」
「削除した内容をあとから確認できるようにしておきたい」
というときに使える、実務を意識したマクロを見ていきましょう!
◼︎古いデータを削除する
月ごとに作成されるシートやファイルがたまっていくと、Excelが重くなったり、管理が面倒になったりしますよね。
そこで便利なのが、一定期間より前のデータをまとめて削除するマクロです。
シートの場合、ファイルの場合でそれぞれみてみましょう。
①シートの場合:半年以上前の月のシートを削除
古いシートを削除する場合には、シート名に年月を入れる等の工夫をして日頃から管理しておく必要があります。
例えば「2024_01」「2024_02」など、「年_月」でシートを管理している場合を想定しましょう。
そのシートの中から、マクロの実行日を基準に半年前より古いシートだけを削除するコードを書いてみました:
Sub DeleteSheetsOlderThan6Months()
Dim ws As Worksheet
Dim thresholdDate As Date
Dim sheetDate As Date
Dim parts() As String
' 今日から6か月前の日付を計算
thresholdDate = DateAdd("m", -6, Date)
' 削除時の確認メッセージを非表示にする
Application.DisplayAlerts = False
' すべてのシートを順番に確認
For Each ws In ThisWorkbook.Worksheets
' 名前が「4桁_2桁」の形式(例:2024_01)ならアンダースコアで区切って年と月を取り出す
If ws.Name Like "####_##" Then
parts = Split(ws.Name, "_")
' 分割できた要素が2つ(年と月)であることを確認
If UBound(parts) = 1 Then
On Error Resume Next
' 年月を使って日付型に変換
sheetDate = DateSerial(CInt(parts(0)), CInt(parts(1)), 1)
' 変換した日付が6か月より前ならシートを削除
If Err.Number = 0 And sheetDate < thresholdDate Then
ws.Delete
End If
On Error GoTo 0
End If
End If
Next ws
' 確認メッセージを元に戻す
Application.DisplayAlerts = True
End Sub
このコードでは、シート名から年と月を抜き出して日付に変換し、基準日(半年前)と比較しています。
仮に2025年7月にこのマクロを実行した場合には、半年以上前のシート=2024年12月以前のシートが削除されるようになっています。
年末年始をまたいだ判定も正確に行えるので、実務でも安心して使える削除ロジックです。
②ファイルの場合:作成日から一定期間経過したものを削除
フォルダ内のファイルについては、作成日時を使って古いものだけを削除することができます。
Sub DeleteOldFiles()
Dim fso As Object
Dim file As Object
Dim fileName As String
Dim targetPath As String
' 削除対象ファイルがあるフォルダのパスを指定
targetPath = "C:\Data\Reports\"
' ファイル操作用のオブジェクトを準備
Set fso = CreateObject("Scripting.FileSystemObject")
' 最初の .xlsx ファイル名を取得
fileName = Dir(targetPath & "*.xlsx")
Do While fileName <> ""
Set file = fso.GetFile(targetPath & fileName)
If file.DateCreated < DateAdd("m", -6, Date) Then
Kill file.Path
End If
fileName = Dir()
Loop
End Sub
このマクロでは、作成日が6か月より前のファイルだけを削除しています。
ファイル名に月日を入れていなくても作成日で判断できるのが特徴です。
このように、シート名やファイル作成日から取得できる年月をもとに削除対象を判定することで、不要になった過去のシートやファイルを削除しすっきり整理することができます。
実務ですぐ使えるマクロだと思うので、ぜひ取り入れてみてください!
◼︎特定の拡張子のファイルを削除する
「特定の種類のファイルだけ削除したい」という場面もありますよね。
例えば、CSVファイルだけを片付けたい、ログファイル(.log)だけを定期的に消したい…そんなときに便利なのが拡張子でフィルタして削除する方法です。
以下は、特定フォルダ内の .csv ファイルだけをまとめて削除するマクロの例です。
Sub DeleteCsvFiles()
Dim fileName As String
fileName = Dir("C:\Data\Temp\*.csv")
Do While fileName <> ""
Kill "C:\Data\Temp\" & fileName
fileName = Dir()
Loop
End Sub
ここでは Dir(“*.csv”) という指定で、CSVファイルだけを抽出しています。
拡張子の部分を変更すれば、.log や .tmp など他の形式にも応用可能です。
一時ファイルやログの整理、処理済データの削除など、実務でも頻繁に活躍するテクニックなので押さえておきましょう。
◼︎削除のログを残す方法
マクロでのシートやファイルの削除処理は便利ですが、取り消しが効かないため「何が削除されたか後で確認したい」「削除した記録を残しておきたい」という場面もあると思います。
そんなときは、削除したファイルやシートの情報をログファイルに書き出すようにしておきましょう。
以下は、削除したファイルのパスと削除日時をテキストファイルに記録するコードです:
Sub DeleteFilesWithLog()
Dim fileName As String
Dim logPath As String
logPath = "C:\Data\delete_log.txt"
fileName = Dir("C:\Data\Temp\*.csv")
Open logPath For Append As #1 ' テキストファイルを追記モードで開く
Do While fileName <> ""
Kill "C:\Data\Temp\" & fileName
Print #1, Now & " Deleted: " & fileName ' 削除内容をログに記録
fileName = Dir()
Loop
Close #1 ' ログファイルを閉じる
End Sub
このように Open … For Append を使うことでVBAからテキストファイルに書き込みをすることができるため、ログファイルの末尾に毎回の実行結果を追記していくことができます。
実行履歴を一つのファイルに蓄積できるので、あとから何が削除されたかを確認できて安心です。
ここまで、シートやファイルの削除をする際の応用コードを紹介してきました。
柔軟な条件指定や削除ログの記録を取り入れることで、より実務に即したマクロ運用ができるようになりますので試してみてください。
4.削除処理の注意点と安全対策
削除処理は便利ですが、大事なデータを消してしまわないようリスクや対策を理解して使うようにしましょう。
ここでは、注意点と安全対策をご説明します。
◼︎削除前にバックアップを取る
削除マクロを使うときに、最も大切なのは「取り返しのつかない削除を防ぐこと」です。
VBAで Kill や Delete を使うと、削除は即時実行され、ごみ箱にも入らず完全に消えてしまいます。
「必要なファイルを消してしまった…」というトラブルが発生しかねないので、最新の注意を払う必要があります。
そのため、削除処理を入れたマクロを作りたての頃は削除前に必ずバックアップを取っておくことをおすすめします。
具体的には、処理対象のファイルやブックを別名で保存しておく、対象フォルダを丸ごとコピーしておく、などの方法があります。
想定外のシートやファイルを消してしまわないマクロであることが確認できてから、バックアップなしで運用するようにしましょう。
◼︎削除対象の条件指定が適切か確認する
削除マクロでよくあるトラブルのひとつが、条件指定が誤っており思わぬシートやファイルが消えてしまったというパターンです。
特に Like “*〇〇*” のように曖昧検索で削除対象を指定していると、意図しないファイルやシートが巻き込まれることがあります。
こうしたミスを防ぐためには、まず削除条件をできるだけ明確にすることが大切です。
たとえば “Temp*” や “2024_*” のように、規則性のある名前ルールを日頃からつけておくことで、削除対象の管理がしやすくなります。

また、バックアップと同じく、マクロの処理に確信が持てるまでは削除予定ファイルを確認する仕組みを作ることをおすすめします。
例えば:
If ws.Name Like "2024*" Then
If MsgBox(ws.Name & " を削除しますか?", vbOKCancel) = vbOK Then
ws.Delete
End If
End If
このようにしておけば、対象の確認をしながら安心して削除処理を進めることができます。
こちらも、削除対象の判定が想定通りであることを確認してからメッセージボックスをなくすようにすることで安心して使えます。
削除マクロはとても便利ですが、誤操作によるリスクもあるため、使い方には注意が必要です。
今回紹介した方法を使ってリスク管理をして使い始めるようにしましょう。
5.まとめ
◼︎削除の基本操作をおさらいしよう
この記事では、シート削除とファイル削除の基本操作をご紹介しました。
削除処理の基本はとてもシンプルですので、改めて表で整理してマスターしましょう。
対象 | 削除方法 | コード例 |
シート | Worksheets(“シート名”).Delete | ThisWorkbook.Sheets(“Sheet1”).Delete |
ファイル | Kill “ファイルパス” | Kill “C:\Data\file1.xlsx” |
この2つの処理を使いこなせれば、不要データを自動で片付けるマクロが簡単に作れます。
まずはこの基本をしっかりマスターしておきましょう!
◼︎削除処理の応用テクニックをおさらいしよう
基本の削除処理をマスターしたら、次は実務に直結する応用テクニックにチャレンジしてみましょう。
この記事では、以下のような応用パターンをご紹介しました。
応用内容 | 方法 | 使用例コード(一部) |
古い月のデータ削除 | 実行日から月を判定 | If sheetDate < DateAdd(“m”, -6, Date) |
拡張子ごとの削除 | Dir(“*.csv”) などで指定 | fileName = Dir(“C:\Data\Temp*.csv”) Kill “C:\Temp\” & fileName |
削除ログの記録 | Open … For Append で書き出し | Print #1, Now & ” Deleted: ” & fileName |
これらを組み合わせることで、「〇か月前より古いデータだけを削除する」「CSVファイルだけ片付ける」「何を削除したか後で確認する」など、より実用的なマクロ運用が可能になります。
応用といっても複雑ではなく基本の応用・組み合わせで実現できることばかりなので、ぜひ挑戦してみてください。
◼︎安全に使うための対策をおさらいしよう
削除マクロは便利な反面、大事なデータを消してしまうリスクもあるため、安全に使うための工夫がとても大切です。
この記事で紹介した内容をもとに、ポイントを一覧でおさらいしておきましょう。
対策内容 | 方法・例 |
バックアップを取る | 本番前にファイルやフォルダをコピーして保存 |
削除対象を確認する | MsgBox で名前を表示/vbOKCancel で実行確認 |
削除条件を明確にする | “Temp*” や “2024_*” など規則的な名前付けをする |
これらのポイントを押さえるだけで、誤削除のリスクは大幅に減り、安心してマクロを使えるようになります。
シートやファイルを削除するマクロは、シンプルですがとても便利です。
基本をしっかり押さえて、少しずつ応用にチャレンジすることで一気に実用的なマクロに近づきます。
まずはテスト環境で気軽に試しながら、自身の業務に合った削除マクロを作ってみてください!
\ Excelマクロ制作も承っています /
各種クラウドソーシングサイトにて業務効率化ツールの作成・カスタマイズを承っております。
ご相談・お見積もりは無料ですので、まずはお気軽にご覧ください!