サイトについて      連絡先   検索

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 つもファイルが一致しないときはエラーが発生します。

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

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

関連ページ