ファイルシステムオブジェクトによるファイル削除

このページでは以下のファイル削除メソッドについて説明します。

※1・・・ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
*(アスタリスク):任意の数(0以上)の文字を表します。
? (クエスチョン):任意の1文字を表します。

スポンサーリンク

使い分けの判断基準

1つのファイルを削除する場合

どちらのメソッドを使用しても機能的には同じになりますので、そのときの処理内容により判断します。通常、処理の途中でファイルオブジェクトを取得済みであれば file.Delete、ファイルオブジェクトを取得していないのであれば fso.DeleteFileを使用します。

複数のファイルを削除する場合

fso.DeleteFileを使用します。削除対象のファイル群を上記ワイルドカードで表現する必要があります。ワイルドカードで表現できない場合は file.Deleteでファイルを1つずつ削除するしかありません。

fso.DeleteFileの使用方法

引数に削除対象のファイルパスを指定してファイルの削除を行います。ファイルが読み取り専用の場合でも削除してよければ、引数 Force に True を指定します。

構文
fso.DeleteFile FileSpec [, Force]
引数名 省略 説明
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

  Setステートメント

複数のファイルを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

  Setステートメント

file.Deleteの使用方法

ファイルオブジェクト内に削除対象のファイルパス情報を持っているので、引数に指定するのはオプションの Force のみです。その他の使用方法は fso.DeleteFile に同じです。

構文
file.Delete [Force]
引数名 省略 説明
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

 fso.GetFile  Setステートメント

フォルダ内の複数ファイルを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フォルダの状態です。

実行前のvbaフォルダの内容
実行前のvbaフォルダの内容

上記サンプルマクロを実行すると、aから始まる数値4桁のテキストファイル2つが削除されたことがわかります。

sample_fs025_04実行後のvbaフォルダの内容
sample_fs025_04実行後のvbaフォルダの内容

 
ファイルシステムオブジェクトのプロパティ・メソッド
ファイルシステムオブジェクトによるフォルダ削除

タイトルとURLをコピーしました