この記事では、ExcelVBAでFileSystemObjectを利用してファイルを削除する方法について説明しています。
FileSystemObjectは、ファイル操作やフォルダ操作したい時に使える便利なライブラリです。
FileSystemObjectが持っている「DeleteFile関数」を使うと、指定したファイルを削除することができます。
「DeleteFile関数」に指定するファイルパスは、以下の2種類を指定可能です。
- ズバリのファイルパス
- あいまいなファイルパス
あいまいなファイルパスは、「ワイルドカード」を利用して指定します。
「ワイルドカード」とは、任意の文字に置き換えできる特殊な文字のことです。
具体的には、以下の2種類の「ワイルドカード」を利用できます。
「*」:任意の長さの文字(0文字以上の文字)
「?」:任意の1文字 または 0文字
それでは、ファイルを削除する方法について、説明していきます。
FileSystemObjectを利用してテキストファイルを読み込む方法については、以下を参照してください。
【VBA入門】FileSystemObjectを使ってテキストファイルを読み込む
FileSystemObjectを利用してテキストファイルへ書き込む方法については、以下を参照してください。
【VBA入門】FileSystemObjectを使ってテキストファイルへ書き込む
もくじ
削除したいファイルパスを指定するシートを準備する
削除したいファイルパスを指定するシートを用意します。
ファイルパスにはもちろんワイルドカードで指定することもできます。
削除したいファイルパスを指定するシートを作成する
- 「ファイル削除」という名前のシートを作成します。
- A1セルに「削除したいファイルパス」のタイトル行を作成します。
- A2セルに「削除したいファイルパス」の入力欄を作成します。
- A4からA6セルに「ワイルドカード」の説明を書いておきます。(使い方を忘れたときに、思い出すため)
ワイルドカードの使い方(*)
*を指定した場合、任意の長さの文字(0文字以上の文字)と置き換え可能となります。
以下のファイルが存在していたとします。
ファイルの例
「202104」で始まるファイルのみ指定する場合は、「202104*」と指定します。
具体的には、202104.txt、202104.xlsx、202104.xlsが該当します。
次に、拡張子が「txt」のファイルのみ指定する場合は、「*.txt」と指定します。
具体的には、202104.txt、202105.txt、202106.txtが該当します。
ワイルドカードの使い方(?)
?を指定した場合、任意の1文字または0文字と置き換え可能となります。
以下のファイルが存在していたとします。

「202104.xlsxと202104.xls」のファイルを指定する場合は、「202104.xls?」と指定します。
具体的には、202104.xlsx、202104.xlsが該当します。
実は、「202104.xls*」でも同じ結果になります・・・。
それでは、テキストファイルへ書き込みする方法を1つずつ説明していきます。
「指定したファイルを削除する」機能の作り方
それでは、VBAプログラムでFileSystemObjectを利用して、指定したファイルを削除する機能を作っていきましょう。
今回利用する「DeleteFile関数」では、指定したファイルが存在しない場合、エラーが発生します。
ですから、エラーが発生した場合も、機能が途中で止まらないようにエラートラップを利用します。
開発タブの「Visual Basic」をクリックして、「Microsoft Visual Basic for Applications」を起動します。
Microsoft Visual Basic for Applicationsを起動する
「Microsoft Visual Basic for Applications」にVBAプログラムを入力します。
指定されたファイルを削除する機能を作成する
標準モジュールを追加して、以下のソースを書きます。
Public Sub FileDelete()
Dim sht As Worksheet
Dim fso As Object
Dim filePath As String
On Error GoTo ErrCatch
'①利用するシートを変数に格納する
Set sht = ThisWorkbook.Sheets("ファイル削除")
'②FileSystemObjectを変数に格納する
Set fso = CreateObject("Scripting.FileSystemObject")
'③ファイルパスを変数に格納する
filePath = sht.Cells(2, 1)
'④ファイルを削除する
fso.DeleteFile (filePath)
MsgBox "削除しました。", vbInformation
ExitSub:
'⑤メモリを開放する
Set fso = Nothing
Exit Sub
ErrCatch:
MsgBox "削除できませんでした:" & Err.Description, vbExclamation
Resume ExitSub
End Sub
最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。
「指定したファイルを削除する」機能の使い方
それでは、指定したファイルを削除する機能の使い方を説明します。
A2セルに書き込むファイルパスを入力します。
まずは、ズバリのファイル名を指定して、ファイルを削除してみましょう。
指定したファイルを削除する機能の使い方
次に、開発タブの「マクロ」をクリックします。
マクロボタンを押す
「FileDelete」を選択して、「実行」ボタンをクリックします。
作成したマクロを実行する
少し待つと、削除が正常に完了した以下のメッセージが表示されます。
削除が完了したメッセージ
それでは、本当にファイルが削除されたか見てみましょう。
指定したファイルが削除された
指定した「202104.txt」ファイルが無くなっています。
次に、存在しないファイルを指定した場合を見てみましょう。
存在しないファイルを指定する
マクロを実行すると、以下のように「削除できませんでした:ファイルが見つかりません。」とメッセージが表示されます。
削除できなかったメッセージが表示
次に、「ワイルドカード」を利用して、ファイルを指定してみましょう。
ワイルドカードを利用してファイルを指定する
マクロを実行すると、削除が正常に完了した以下のメッセージが表示されます。
削除が完了したメッセージ
それでは、フォルダを見てみましょう。
「202105」で始まるファイルが3つ削除されました。
指定したファイルが削除された
ワイルドカードは面白いので、いろいろ試してみてください。
「指定したファイルを削除する」機能のVBAプログラム(FileDelete)の説明
それでは、VBAプログラム(FileDelete)を説明します。
エラーが発生した場合に処理が飛んで欲しいラベルを指定する
On Error GoTo ErrCatch
エラーが発生した場合、「ErrCatch」というラベルに処理が飛ぶように指定します。
こうすることにより、エラーが発生した場合にマクロが異常終了することを防げます。
エラーが発生しても、上手く処理できるようになったら、一人前です。
「ErrCatch」ラベルについては、後ほど説明します。
①利用するシートを変数に格納する
'①利用するシートを変数に格納する
Set sht = ThisWorkbook.Sheets("ファイル削除")
ここでは、このあとの処理で何度も使う「ファイル削除」シートを変数に格納しています。
そうすることにより、入力するプログラムを短くすることができるからです。
何度も「ThisWorkbook.Sheets(“ファイル削除”)」と入力するより、「sht」と入力するほうがコードが少なくてよいからです。
②FileSystemObjectを変数に格納する
'②FileSystemObjectを変数に格納する
Set fso = CreateObject("Scripting.FileSystemObject")
ここでは、ファイル操作に必要な「FileSystemObject」を変数に格納しています。
③ファイルパスを変数に格納する
'③ファイルパスを変数に格納する filePath = sht.Cells(2, 1)
ここでは、削除するファイルパスを変数に格納しています。
ズバリのファイルパスだろうと、ワイルドカードを利用したファイルパスだろうが同じで、変数に格納します。
④ファイルを削除する
'④ファイルを削除する fso.DeleteFile (filePath)
ここでは、「FileSystemObject」の「DeleteFile」関数を利用して、指定されたファイルを削除します。
指定されたファイルが存在する場合は、そのファイルが削除されます。
しかし、指定されたファイルが存在しない場合、ここでエラーが発生します。
先程説明した「ErrCatch」というラベルに処理が飛んでいきます。
スバリのファイルパスを指定した場合は、1つのファイルを削除します。
ワイルドカードでファイルパスを指定した場合、該当するファイル数すべて削除します。
⑤メモリを開放する
ExitSub:
'⑤メモリを開放する
Set fso = Nothing
Exit Sub
ここでは、「ExitSub」というラベルを指定しています。
このあとで説明する「ErrCatch」ラベルにエラーが発生したために、処理が飛んだ場合にこちらの「ExitSub」ラベルに処理を戻すように書いています。
エラーが発生しなかった場合、上から処理が流れてきます。
その場合、メモリを開放して、「Exit Sub」でこの関数から処理を抜け出します。
つまり、処理を終わらせます。
エラーをトラップする
ErrCatch:
MsgBox "削除できませんでした:" & Err.Description, vbExclamation
Resume ExitSub
ここでは、「ErrCatch」というラベルを指定しています。
VBAソースの冒頭で指定された「ErrCatch」ラベルです。
エラーが発生した場合、このラベルに処理が飛んできます。
「削除できませんでした:エラー内容」というメッセージボックスを表示させます。
次に、「Resume ExitSub」という命令で、エラーをクリアして「ExitSub」ラベルに処理を飛ばしています。
こうすることにより、VBAプログラムをエラーが発生した場合でも、途中で処理を止めずに最後まで実行することができるようになります。
FileSystemObjectを利用して、ファイルを削除する方法を説明しました。
ワイルドカードを利用し、指定したファイルを削除してみましょう。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

