VBA ファイルの削除

はじめに

Excel VBA マクロでファイルを削除する方法を紹介します。

DeleteFile 関数を使って指定したファイルや、フォルダ内のファイルの削除ができます。

ワイルドカードを使って複数のファイルや全てのファイルの削除ができます。

フォルダを削除するには「フォルダの削除」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

  • 目次
    • ファイルの削除

ファイルの削除

誤って必要なファイルを削除しないように、パスには注意してください。

指定したファイルの削除

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Call fso.DeleteFile("D:\Tips.txt", True) ' 指定したパスのファイルを削除

' 後始末
Set fso = Nothing

fso.DeleteFile 関数で指定したパスのファイルを削除します。

第 1 引数に削除するファイルのパスを指定します。ファイルが存在しないときはエラーが発生します。パスにはワイルドカードを指定できますが、詳しくは下記の「複数のファイルを削除」をご覧ください。

第 2 引数に True を指定すると読み取り専用のファイルを削除できます。False または省略すると読み取り専用のファイルのときはエラーが発生します。

フォルダ内のファイルを削除

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim fl As Folder
Set fl = fso.GetFolder("D:\TipsFolder") ' フォルダを取得

Dim f As File
For Each f In fl.Files ' フォルダ内のファイルを取得
    If f.Name = "Tips.txt" Then ' 削除したいファイル
        f.Delete (True)         ' ファイルを削除
    End If
Next

' 後始末
Set fso = Nothing

fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

fl.Files プロパティから、そのフォルダの File オブジェクトの一覧を取得できます。

f.Name プロパティから、そのファイルの拡張子付きの名前を取得できます。これで削除したいファイルか判定します。

f.Delete 関数でそのファイルを削除します。使い方は上記で説明した fso.DeleteFile 関数と同じです。DeleteFile の第 1 引数に、そのファイルのパスが渡されます。

複数のファイルを削除

フォルダ内の複数のファイルをワイルドカードを使用してまとめて削除できます。

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Call fso.DeleteFile("D:\Tips*.txt", True)    ' 複数のファイルをまとめて削除
Call fso.DeleteFile("D:\TipsFolder\*", True) ' すべてのファイルを削除

' 後始末
Set fso = Nothing

fso.DeleteFile 関数の第 1 引数にワイルドカードを指定して、一致する複数のファイルをまとめて削除できます。1 つもファイルが一致しないときはエラーが発生します。

使用できるワイルドカードには次のものがあります。

パターン 説明 使用例 一致例
*任意の長さの文字 (0 文字以上)あ*あ, あい, あいう
?任意の1文字 または 0 文字あ?あい, あか, あき

D:\Tips*.txt を指定すると次のファイルが一致します。

D:\Tips.txt
D:\Tips1.txt
D:\Tips12.txt
D:\Tips123.txt

D:\Tips?.txt を指定すると次のファイルが一致します。

D:\Tips.txt
D:\Tips1.txt
D:\Tips2.txt

D:\TipsFolder\* を指定すると、TipsFolder フォルダ内のすべてのファイルと一致します。

すべてのファイルを削除

フォルダ内の一つひとつのファイルに対して Delete 関数を実行します。

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim fl As Folder
Set fl = fso.GetFolder("D:\TipsFolder") ' フォルダを取得

Dim f As File
For Each f In fl.Files
    f.Delete (True) ' ファイルを削除
Next

' 後始末
Set fso = Nothing