【2026年7月最新】VBAのKillステートメント完全ガイド|ファイル削除・一括削除・エラー処理まで実践コード付きで解説
この記事の内容
「Excelマクロで処理後に不要な一時ファイルを自動削除したい」「一定期間が過ぎた古いログファイルを定期的にまとめて削除したい」「バックアップフォルダの古いファイルをマクロで整理したい」——VBAでファイルを自動削除する処理は、業務自動化マクロで頻繁に必要になります。
VBAでファイルを削除するには、組み込みの「Killステートメント」が最もシンプルな方法です。この記事では、Killステートメントの基本構文から始め、ワイルドカードを使った一括削除・Dir関数による存在確認・エラー処理付きの安全なパターン・フォルダ削除(RmDir)・FileSystemObjectとの比較・業務実践パターンまで、コード例を豊富に交えて完全解説します。
01 FILE OPS OVERVIEW VBAのファイル操作の全体像 Kill以外のファイル操作命令を整理して全体像を把握する
VBAにはファイルやフォルダを操作するための組み込み命令が複数あります。Killステートメントはその中の「ファイル削除」を担う命令です。まずVBAのファイル操作の全体像を把握してから、Killの詳細に入ります。
| 命令 | 操作内容 | 使用例 |
|---|---|---|
| Kill | ファイルを削除 | Kill "C:\Data\old.xlsx" |
| FileCopy | ファイルをコピー | FileCopy "元", "先" |
| Name ... As ... | ファイル名変更・移動 | Name "旧" As "新" |
| MkDir | フォルダを作成 | MkDir "C:\NewFolder" |
| RmDir | 空のフォルダを削除 | RmDir "C:\OldFolder" |
| Dir | ファイル/フォルダの存在確認 | If Dir("path") <> "" Then ... |
| Open / Close | ファイルを開く/閉じる(テキスト操作) | Open "path" For Input As #1 |
📚 用語解説
Killステートメント:VBA組み込みのファイル削除命令。「Kill ファイルパス」の1行でWindowsファイルシステム上のファイルを削除します。削除されたファイルはごみ箱には入らず完全削除されます。そのため削除前に「本当に削除していいか」の確認や、バックアップを取る処理と組み合わせることを推奨します。ワイルドカード(*・?)も使えます。
Killステートメントで削除したファイルはWindowsのごみ箱に入らず、完全削除されます。「誤って削除してしまった」という事故を防ぐため、Killを使う前には「削除対象のファイル一覧をログに記録する」または「DeleteToRecycleBin(FileSystemObjectのDeleteFileの引数でごみ箱送りにする)を使う」などの対策を検討してください。
02 KILL BASIC Killステートメントの基本構文と単一ファイル削除 絶対パス・相対パス・ThisWorkbook.Pathを使ったファイル削除
Killステートメントの構文は「Kill ファイルパス」の1行だけです。ファイルパスは文字列(ダブルクォートで囲む)または文字列型変数で指定します。削除するファイルが存在しない場合はランタイムエラー53「File not found」が発生します。
' === Killの基本構文 === Kill "ファイルのフルパス" ' === パスの指定パターン === ' 1. 絶対パスで直接指定 Kill "C:\Data\old_report.xlsx" ' 2. 変数にパスを入れて指定 Dim filePath As String filePath = "C:\Data\temp_output.csv" Kill filePath ' 3. ThisWorkbook.Pathを使って現在のファイルと同じフォルダのファイルを削除 Kill ThisWorkbook.Path & "\backup.xlsx" ' 4. バックスラッシュを確実に付けるためにApplication.PathSeparatorを使う Kill ThisWorkbook.Path & Application.PathSeparator & "log.txt" ' ※Application.PathSeparatorはWindowsでは"\"、Macでは"/"を返す
2-1. 削除前にMsgBoxで確認するパターン
業務マクロで重要なファイルを削除する場合は、実行前にユーザーに確認を求めるMsgBox(vbYesNo)を入れることで誤削除を防げます。マクロの途中で呼ばれる場合など、ユーザーが意図していない削除が発生しないようにする防御策です。
' 削除確認ダイアログを表示してからKill
Sub DeleteWithConfirmation()
Dim filePath As String
filePath = ThisWorkbook.Path & "\monthly_report_old.xlsx"
' ファイルの存在確認
If Dir(filePath) = "" Then
MsgBox "ファイルが見つかりません: " & filePath, vbExclamation
Exit Sub
End If
' 確認ダイアログ
Dim answer As Integer
answer = MsgBox("以下のファイルを削除しますか?" & vbCrLf & filePath, _
vbYesNo + vbQuestion, "削除確認")
If answer = vbYes Then
Kill filePath
MsgBox "削除しました: " & filePath, vbInformation
Else
MsgBox "キャンセルしました", vbInformation
End If
End Sub
03 WILDCARD BULK ワイルドカードで複数ファイルを一括削除する 拡張子・ファイル名パターン・全ファイルの一括削除方法
Killステートメントではワイルドカードを使ってパターンに一致する複数のファイルを一括削除できます。「*」(0文字以上の任意の文字列)と「?」(任意の1文字)が使えます。ワイルドカードを使うと、拡張子が同じファイルを全部削除する・特定のプレフィックスで始まるファイルを全部削除するといった操作が1行で実現できます。
📚 用語解説
ワイルドカード(Kill/Dirで使用):ファイルパスの指定で使える特殊文字。「*(アスタリスク)」は0文字以上の任意の文字列にマッチ("*.xlsx"はxlsx拡張子の全ファイル)、「?(クエスチョン)」は1文字の任意の文字にマッチ("data_??.csv"は"data_01.csv"など)。Killでのワイルドカードはフォルダ内の直接の子ファイルにのみ適用されます(サブフォルダは対象外)。
' ワイルドカードを使った一括削除 ' 1. 拡張子で絞り込んで一括削除(フォルダ内の全csvファイルを削除) Kill "C:\Temp\*.csv" ' 2. ファイル名の先頭で絞り込む(tempで始まる全ファイルを削除) Kill "C:\Data\temp*.*" ' 3. 全ファイルを削除(フォルダ内の全ファイル) Kill "C:\Temp\*.*" ' 4. 特定パターンのファイル名(backup_YYMMDD形式の6桁日付) Kill "C:\Backup\backup_??????.xlsx" ' 5. 特定のフォルダ配下の全xlsxファイル Kill ThisWorkbook.Path & "\output\*.xlsx" ' 注意: ワイルドカードで一致するファイルが存在しない場合はエラー53が発生 ' → 必ずDir+On Error Resumeで存在確認してから使う
3-1. ワイルドカード削除前の存在確認
ワイルドカードを使ったKillは、一致するファイルが1件もない場合にエラー53が発生します。これを防ぐには、削除前にDir関数でワイルドカードパターンに一致するファイルが存在するか確認します。
' ワイルドカードでの安全な一括削除
Sub SafeWildcardDelete()
Dim folderPath As String
Dim pattern As String
folderPath = "C:\Temp\"
pattern = "*.csv"
' ワイルドカードに一致するファイルが存在するか確認
If Dir(folderPath & pattern) = "" Then
MsgBox folderPath & " に " & pattern & " ファイルはありません", vbInformation
Exit Sub
End If
' 存在する場合のみ削除
On Error GoTo DeleteError
Kill folderPath & pattern
MsgBox folderPath & " の全 " & pattern & " を削除しました", vbInformation
Exit Sub
DeleteError:
MsgBox "削除中にエラー: " & Err.Description, vbCritical
End Sub
04 DIR CHECK Dir関数でファイル存在確認してから削除する 安全なファイル削除の基本パターン:削除前に存在確認
Dir関数は指定したパスのファイル・フォルダが存在するか確認するVBA組み込み関数です。ファイルが存在すればそのファイル名(文字列)を返し、存在しなければ空文字列("")を返します。Kill実行前にDirで確認することで「ファイルが存在しない場合のエラー53」を回避できます。
📚 用語解説
Dir関数:ファイル・フォルダの存在確認と一覧取得に使うVBA組み込み関数。「Dir(パス)」でパスのファイルが存在すればファイル名を返し、存在しなければ空文字("")を返します。ワイルドカードも使えます。Dir(パス, vbDirectory)でフォルダの存在確認もできます。
' Dir関数でファイル存在確認してからKillする基本パターン
' ===== パターン1: If Dir() <> "" Then Kill =====
Sub DeleteIfExists_Simple()
Dim filePath As String
filePath = "C:\Data\report.xlsx"
If Dir(filePath) <> "" Then
Kill filePath
Debug.Print "削除完了: " & filePath
Else
Debug.Print "ファイルなし(スキップ): " & filePath
End If
End Sub
' ===== パターン2: 関数化して再利用しやすく =====
Function DeleteFileIfExists(filePath As String) As Boolean
If Dir(filePath) <> "" Then
On Error Resume Next
Kill filePath
Dim success As Boolean
success = (Err.Number = 0)
On Error GoTo 0
DeleteFileIfExists = success
Else
DeleteFileIfExists = False ' ファイルなし
End If
End Function
' 使い方
Sub TestDeleteFile()
If DeleteFileIfExists("C:\Data\old.xlsx") Then
MsgBox "削除成功"
Else
MsgBox "削除失敗またはファイルなし"
End If
End Sub
Dir関数は最初の呼び出し後に引数なしでDir()と呼ぶと次のファイル名を返します(ループ用)。これを使って「削除対象ファイルの一覧を先に取得して確認する」という安全策を実装できます。
' Dir関数のループで削除対象ファイル一覧を取得してから削除
Sub PreviewAndDelete()
Dim folderPath As String
folderPath = "C:\Backup\"
Dim pattern As String
pattern = "*.xlsx"
' まず一覧を取得
Dim fileList As String
Dim fileName As String
fileName = Dir(folderPath & pattern)
Dim count As Integer
count = 0
Do While fileName <> ""
fileList = fileList & fileName & vbCrLf
count = count + 1
fileName = Dir() ' 次のファイル名
Loop
If count = 0 Then
MsgBox "削除対象なし", vbInformation
Exit Sub
End If
' 確認ダイアログで一覧表示
Dim answer As Integer
answer = MsgBox(count & "件のファイルを削除します:" & vbCrLf & fileList, _
vbOKCancel + vbExclamation, "削除確認")
If answer = vbOK Then
Kill folderPath & pattern
MsgBox count & "件削除完了", vbInformation
End If
End Sub
05 SAFE DELETE エラー処理付きの安全なファイル削除パターン 本番マクロで使える堅牢なKillの実装テンプレート
本番業務マクロでKillを使う場合は、On Error GoToによるエラー処理を組み合わせます。ファイルが別のアプリで開かれている場合(エラー70)・パスが正しくない場合(エラー76)・削除権限がない場合(エラー70)など、様々なエラーに対処できるテンプレートを紹介します。
' 本番マクロで使える安全なファイル削除テンプレート
Sub SafeDeleteTemplate()
Dim filePath As String
filePath = "C:\Data\monthly_temp.xlsx"
' 存在確認
If Dir(filePath) = "" Then
' ファイルが存在しない場合はスキップ(エラーにしない)
Debug.Print "スキップ(存在なし): " & filePath
Exit Sub
End If
On Error GoTo DeleteError
Kill filePath
Debug.Print "削除完了: " & filePath
Exit Sub
DeleteError:
Select Case Err.Number
Case 70 ' Permission denied(他アプリで開かれている)
MsgBox "ファイルが他のアプリで開かれています。" & vbCrLf & _
"閉じてから再実行してください: " & filePath, vbExclamation
Case 76 ' Path not found(フォルダが存在しない)
MsgBox "フォルダが見つかりません: " & filePath, vbCritical
Case Else
MsgBox "削除エラー(" & Err.Number & "): " & Err.Description & vbCrLf & _
"対象: " & filePath, vbCritical
End Select
End Sub
06 RMDIR フォルダの削除(RmDir・再帰的削除) RmDirでの空フォルダ削除と、フォルダを中身ごと削除するパターン
VBAでフォルダを削除するには「RmDir フォルダパス」を使います。ただしRmDirは空のフォルダしか削除できません。フォルダの中にファイルが残っている場合はエラーになります。「フォルダを中身ごと削除したい」場合は、先にKillでフォルダ内の全ファイルを削除してから、RmDirでフォルダを削除する2ステップが必要です。
📚 用語解説
RmDir(リムーブ・ディレクトリ):VBAでフォルダ(ディレクトリ)を削除する組み込み命令。「RmDir フォルダパス」で指定したフォルダを削除します。RmDirが機能するのは空のフォルダのみです。ファイルやサブフォルダが残っているフォルダを削除しようとするとエラー75「Path/File access error」が発生します。
' フォルダを中身ごと削除する2ステップパターン
Sub DeleteFolderWithContents()
Dim folderPath As String
folderPath = "C:\Temp\work_folder"
' フォルダが存在するか確認
If Dir(folderPath, vbDirectory) = "" Then
MsgBox "フォルダが見つかりません: " & folderPath, vbExclamation
Exit Sub
End If
On Error GoTo DeleteError
' Step 1: フォルダ内の全ファイルを削除
If Dir(folderPath & "\*.*") <> "" Then
Kill folderPath & "\*.*"
End If
' Step 2: 空になったフォルダを削除
RmDir folderPath
MsgBox "フォルダを削除しました: " & folderPath, vbInformation
Exit Sub
DeleteError:
MsgBox "フォルダ削除エラー(" & Err.Number & "): " & Err.Description, vbCritical
End Sub
Kill *.* でサブフォルダは削除できません。フォルダにサブフォルダが含まれる場合は「再帰的削除(全サブフォルダを順に処理)」か「FileSystemObjectのDeleteFolder( Force:=True)」を使う必要があります。業務で深い階層のフォルダを削除する場合はFileSystemObjectを使う方が簡単です。
07 FSO COMPARISON KillとFileSystemObject(FSO)の比較 どちらを使うべきか、用途別の選択基準
VBAでのファイル削除はKillステートメント以外に「FileSystemObject(FSO)のDeleteFileメソッド」も使えます。FSOはMicrosoft Scripting RuntimeのCOMオブジェクトで、Killより機能が豊富ですが参照設定または遅延バインディングが必要です。
📚 用語解説
FileSystemObject(FSO):Microsoft Scripting Runtimeが提供するファイルシステム操作オブジェクト。DeleteFile・DeleteFolder・CopyFile・MoveFile・CreateFolder・FileExistsなど豊富なメソッドを提供します。「ごみ箱に送る(DeleteFile path, Force:=True)」はできませんが、Killよりエラーメッセージが分かりやすく、フォルダを再帰的に削除するDeleteFolderが使えます。VBEの参照設定でMicrosoft Scripting Runtimeを追加するか、CreateObject("Scripting.FileSystemObject")で使います。
| 比較軸 | Kill(組み込み) | FileSystemObject.DeleteFile |
|---|---|---|
| 記述量 | 1行(Kill パス) | 3〜5行(FSO作成→削除) |
| 参照設定 | 不要 | MSScripting Runtime追加またはCreateObject |
| ワイルドカード | 使用可 | 使用不可(ファイルパス固定) |
| フォルダを再帰削除 | できない | DeleteFolderで可能 |
| ごみ箱送り | できない | できない(完全削除のみ) |
| エラーメッセージ | VBA標準エラー | FSOの独自例外(より詳細) |
| 推奨用途 | ワイルドカード一括削除・シンプルな削除 | フォルダ再帰削除・複雑なファイル操作 |
' FileSystemObjectでのファイル削除
Sub DeleteWithFSO()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim filePath As String
filePath = "C:\Data\old_report.xlsx"
' ファイル存在確認(FSOのFileExistsメソッド)
If fso.FileExists(filePath) Then
fso.DeleteFile filePath
MsgBox "削除完了", vbInformation
Else
MsgBox "ファイルが存在しません", vbExclamation
End If
Set fso = Nothing ' オブジェクトを解放
End Sub
ワイルドカードで複数ファイルを一括削除したい場合はKillを使います。サブフォルダを含むフォルダ全体を削除したい場合や、FileExists/FolderExistsなどの便利なメソッドを使いたい場合はFSOが適しています。1つのマクロで両方使い分けることも問題ありません。
08 BUSINESS PATTERNS 業務での実践活用パターン バックアップ整理・ログクリーンアップ・一時ファイル削除の実装例
8-1. 古いバックアップファイルを自動削除(日付判定)
' 30日以上古いバックアップファイルを削除
Sub DeleteOldBackups()
Dim backupFolder As String
backupFolder = "C:\Backup\"
Dim cutoffDate As Date
cutoffDate = Date - 30 ' 30日前の日付
Dim fileName As String
fileName = Dir(backupFolder & "*.xlsx")
Dim deletedCount As Integer
Dim skippedCount As Integer
Do While fileName <> ""
Dim fullPath As String
fullPath = backupFolder & fileName
' ファイルの更新日時を確認
Dim fileDate As Date
fileDate = FileDateTime(fullPath)
If fileDate < cutoffDate Then
' 30日以上古い → 削除
On Error Resume Next
Kill fullPath
If Err.Number = 0 Then
deletedCount = deletedCount + 1
Debug.Print "削除: " & fileName & " (" & Format(fileDate, "yyyy/mm/dd") & ")"
Else
Debug.Print "削除失敗: " & fileName & " - " & Err.Description
Err.Clear
End If
On Error GoTo 0
Else
skippedCount = skippedCount + 1
End If
fileName = Dir() ' 次のファイル
Loop
MsgBox "完了: 削除=" & deletedCount & "件 / 保持=" & skippedCount & "件", vbInformation
End Sub
8-2. 処理後の一時ファイルを自動削除するテンプレート
' 処理中に一時ファイルを作り、処理完了後に削除するテンプレート
Sub ProcessWithTempFile()
Dim tempPath As String
tempPath = ThisWorkbook.Path & "\temp_" & Format(Now, "yyyymmddHHmmss") & ".xlsx"
On Error GoTo CleanupAndError
' Step 1: 一時ファイルを作成
Dim tempWb As Workbook
Set tempWb = Workbooks.Add
tempWb.SaveAs tempPath
' Step 2: 一時ファイルを使った処理
tempWb.Sheets(1).Cells(1, 1).Value = "処理データ"
' ...(データ処理)...
' Step 3: 処理完了後に一時ファイルを閉じて削除
tempWb.Close False
Set tempWb = Nothing
If Dir(tempPath) <> "" Then
Kill tempPath
Debug.Print "一時ファイル削除完了"
End If
MsgBox "処理完了", vbInformation
Exit Sub
CleanupAndError:
Dim errMsg As String
errMsg = "エラー(" & Err.Number & "): " & Err.Description
' エラー時もファイルをクリーンアップ
On Error Resume Next
If Not tempWb Is Nothing Then tempWb.Close False
If Dir(tempPath) <> "" Then Kill tempPath
On Error GoTo 0
MsgBox "エラーが発生しました。" & vbCrLf & errMsg, vbCritical
End Sub
09 COMMON MISTAKES よくある失敗とデバッグのポイント Kill使用時によく発生するエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| エラー53 File not found | Killするファイルが存在しない | Kill前にDir()で存在確認 |
| エラー70 Permission denied | ファイルが別のアプリ(Excel含む)で開かれている | ファイルを閉じてからKill。Workbook.Closeを先に実行 |
| エラー76 Path not found | 指定したフォルダが存在しない | フォルダパスの確認。Dir(folder, vbDirectory)でフォルダ存在確認 |
| ワイルドカード削除で一部削除されない | 読み取り専用属性のファイルは削除できない | SetAttr file, vbNormalで属性をクリアしてからKill |
' 読み取り専用ファイルを削除するための属性クリア
Sub DeleteReadOnlyFile()
Dim filePath As String
filePath = "C:\Data\readonly_file.xlsx"
If Dir(filePath) = "" Then
MsgBox "ファイルが見つかりません", vbExclamation
Exit Sub
End If
' 読み取り専用属性を確認
If GetAttr(filePath) And vbReadOnly Then
' 読み取り専用を解除してから削除
SetAttr filePath, vbNormal
End If
Kill filePath
MsgBox "削除完了(読み取り専用を解除して削除)"
End Sub
10 CLAUDE CODE Claude CodeでVBAファイル削除コードを自動生成 ファイル整理・削除ロジックをAIで瞬時に生成する方法
VBAのKillステートメントを使ったファイル削除処理は、「どのファイルを・どの条件で・エラー時にどう処理するか」が決まれば、Claude Codeに任せることができます。特に「一定期間前のファイルを削除」「特定フォルダの特定拡張子を一括削除」のような業務要件は、要件を日本語で伝えるだけで実装できます。
11 CONCLUSION まとめ VBA Killステートメントの全体像と安全な使い方
この記事では、VBAのKillステートメントによるファイル削除を11セクションで完全解説しました。基本構文・ワイルドカード一括削除・Dir確認・エラー処理・RmDir・FSOとの比較・業務実践パターンまで体系的に整理しました。
VBAファイル操作自動化、Claude Codeで即設計します
「マクロで古いファイルを自動整理したい」「バックアップフォルダのクリーンアップを自動化したい」「ファイル操作マクロのエラー処理を強化したい」——弊社AI鬼管理では、Claude Codeを活用した業務Excel自動化の設計・実装支援を提供しています。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. VBAのKillで削除したファイルをごみ箱から復元できますか?
A. できません。KillステートメントはWindowsのごみ箱を経由せず、直接ファイルを削除します。「誤って削除してしまった」場合は、ファイル復元ソフトウェアを使うか、バックアップから復元する必要があります。重要なファイルを削除する前には必ずバックアップを取ることと、削除前にユーザー確認ダイアログ(vbYesNo)を表示することを推奨します。
Q. Kill *.* でサブフォルダも削除されますか?
A. 削除されません。Kill *.* はそのフォルダの直接の子ファイルのみを削除します。サブフォルダとサブフォルダ内のファイルは対象外です。サブフォルダを含む全削除にはFileSystemObjectのDeleteFolder(Force引数付き)を使います。
Q. Open中のファイルをKillで削除できますか?
A. できません。Open ... As #n でVBAが開いているファイルをKillしようとするとエラー70(Permission denied)が発生します。Kill前にClose #nでファイルを閉じてから削除してください。ExcelのWorkbookが開いているファイルも同様で、Workbook.Close → Killの順序が必要です。
Q. フォルダごと削除するにはどうすればいいですか?
A. RmDirは空フォルダのみ削除できます。ファイルを含むフォルダを削除するには、Kill フォルダ\*.* で全ファイルを削除してからRmDirでフォルダを削除します(サブフォルダがない場合)。サブフォルダを含む場合はFileSystemObjectのDeleteFolder(パス, Force:=True)を使います。
Q. ネットワークドライブのファイルもKillで削除できますか?
A. できます。\\サーバー名\共有フォルダ\ファイル名 のようなUNCパス、またはネットワークドライブのマップされたドライブ文字(Z:\など)を使ってKillが実行できます。ただしネットワーク接続が切れているとエラーになるため、エラー処理は必須です。
Q. Killで削除する前に、削除対象のファイルリストをログに残したい
A. Dir関数のループで削除対象ファイルを先に列挙し、テキストファイルに書き出す(Open ... For Append → Print #n)か、Excelシートに記録してからKillを実行するパターンが有効です。削除実行前にリストをDebug.Printで出力して確認する方法も開発時には有効です。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




