このページでは以下のファイル削除メソッドについて説明します。
※1・・・ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
*(アスタリスク):任意の数(0以上)の文字を表します。
? (クエスチョン):任意の1文字を表します。
使い分けの判断基準
1つのファイルを削除する場合
どちらのメソッドを使用しても機能的には同じになりますので、そのときの処理内容により判断します。通常、処理の途中でファイルオブジェクトを取得済みであれば file.Delete、ファイルオブジェクトを取得していないのであれば fso.DeleteFileを使用します。
複数のファイルを削除する場合
fso.DeleteFileを使用します。削除対象のファイル群を上記ワイルドカードで表現する必要があります。ワイルドカードで表現できない場合は file.Deleteでファイルを1つずつ削除するしかありません。
fso.DeleteFileの使用方法
引数に削除対象のファイルパスを指定してファイルの削除を行います。ファイルが読み取り専用の場合でも削除してよければ、引数 Force に True を指定します。
引数名 | 省略 | 説明 |
---|---|---|
FileSpec | × | 削除するファイルを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 ファイルパスは絶対パス、相対パスともに指定可能です。 |
Force | ○ | 読み取り専用のファイルを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。 |
引数 FileSpec に指定したファイルが存在しない場合、エラーが発生します。また、引数 FileSpec に指定したファイルが存在していても他のアプリケーションにより使用中の場合はエラーが発生します。
1つのファイルを削除する
vba フォルダ内にある test.txt を削除する例です。
Sub sample_fs025_01()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strPath As String '削除対象ファイル
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'削除対象ファイル
strPath = "C:\Users\xxx\Desktop\vba\test.txt"
'ファイルの削除(読み取り専用の場合も削除)
fso.DeleteFile strPath, True
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
複数のファイルを1命令で削除する
引数 FileSpec にワイルドカードを使用して削除したいファイル群を表現します。以下の例では、vba フォルダ内にあるテキストファイルをすべて削除します。
Sub sample_fs025_02()
Dim fso As Object 'ファイルシステムオブジェクト
Dim strPath As String '削除対象ファイル
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'削除対象ファイル
strPath = "C:\Users\xxx\Desktop\vba\*.txt"
'ファイルの削除(読み取り専用の場合も削除)
fso.DeleteFile strPath, True
'オブジェクト変数のクリア
Set fso = Nothing
End Sub
file.Deleteの使用方法
ファイルオブジェクト内に削除対象のファイルパス情報を持っているので、引数に指定するのはオプションの Force のみです。その他の使用方法は fso.DeleteFile に同じです。
引数名 | 省略 | 説明 |
---|---|---|
Force | ○ | 読み取り専用のファイルを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。 |
引数 FileSpec に指定したファイルが存在していても他のアプリケーションにより使用中の場合はエラーが発生します。
1つのファイルを削除する
vba フォルダ内にある test.txt を削除する例です。
Sub sample_fs025_03()
Dim fso As Object 'ファイルシステムオブジェクト
Dim fileObj As Object 'ファイルオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'ファイルオブジェクト取得
Set fileObj = fso.GetFile("C:\Users\xxx\Desktop\vba\test.txt")
'ファイルの削除(読み取り専用の場合も削除)
fso.DeleteFile True
'オブジェクト変数のクリア
Set fso = Nothing
Set fileObj = Nothing
End Sub
フォルダ内の複数ファイルを1つずつ削除する
指定されたフォルダ内のファイルのうち、Like演算子 を使用して、あるファイル名パターンに合致するものだけを削除する例です。以下の例では、ファイル名が”a”と4ケタの数字からなるテキストファイルを削除します。
数値4ケタは2種類のワイルドカード( * および ? )では表現できません。? は任意の1文字を表すため “a????.txt” としてしまうと “aaaaa.txt” なども削除の対象となってしまいます。このため、Like演算子 と数字を表す”#”を使用してファイル名の判定を行っています。
Sub sample_fs025_04()
Dim fso As Object 'ファイルシステムオブジェクト
Dim folderObj As Object 'フォルダオブジェクト
Dim fileObj As Object 'ファイルオブジェクト
'メインオブジェクトの生成
Set fso = CreateObject("Scripting.FileSystemObject")
'フォルダオブジェクト取得
Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\vba")
For Each fileObj In folderObj.Files
'ファイル名判定
If fileObj.Name Like "a####.txt" Then
'ファイルの削除(読み取り専用の場合も削除)
fileObj.Delete True
End If
Next
'オブジェクト変数のクリア
Set fso = Nothing
Set folderObj = Nothing
Set fileObj = Nothing
End Sub
fso.GetFolder For Each…Next Like 演算子 Setステートメント
以下の図はマクロ実行前のvbaフォルダの状態です。
上記サンプルマクロを実行すると、aから始まる数値4桁のテキストファイル2つが削除されたことがわかります。