アクセス上位ページ
 
最近の更新内容
(2)-d.FSOによるファイルコピー ⇐ [PREV]
[NEXT] ⇒ (2)-f.CreateTextFile メソッド

Excel VBA ≫ 3.FSO - FSOによるファイル操作(2)-e.FSOによるファイル削除

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

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

内容 メソッド
ファイル削除 fso.DeleteFile(※1)
file.Delete


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


    <使い分けの判断基準>
  • 複数のファイルを削除する場合
  • fso.DeleteFile を使用します。削除対象のファイル群を上記ワイルドカードで表現する必要があります。 ワイルドカードで表現できない場合は file.Delete でファイルを1つずつ削除するしかありません。 (⇒ フォルダ内のファイルを1つずつ削除する例

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




fso.DeleteFile

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

  • 【構文】
    fso.DeleteFile FileSpec [, Force]

引数名 省略 説明
FileSpec × 削除するファイルを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 ファイルパスは絶対パス、相対パスともに指定可能です。
Force 読み取り専用のファイルを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。
引数 FileSpec に指定したファイルが存在しない場合、エラーが発生します。また、引数 FileSpec に指定したファイルが存在していても他のアプリケーションにより使用中の場合はエラーが発生します。

  • 1つのファイルを削除する
  • 以下の例では vba フォルダ内にある test.txt を削除します。
    Sub test_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 に同じです。

  • 【構文】
    file.Delete [Force]

引数名 省略 説明
Force 読み取り専用のファイルを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。
引数 FileSpec に指定したファイルが存在していても他のアプリケーションにより使用中の場合はエラーが発生します。

  • 1つのファイルを削除する
  • 以下の例では vba フォルダ内にある test.txt を削除します。
    Sub test_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ケタの数字からなるテキストファイルを削除します。
    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
    

    <実行前 - vba フォルダの内容> 実行前のvbaフォルダの内容 <sample_fs025_04 実行後 - vba フォルダの内容> sample_fs025_04実行後のvbaフォルダの内容
    <補足>
    数値4ケタは2種類のワイルドカード( * および ? )では表現できません。 ? は任意の1文字を表すため "a????.txt" としてしまうと "aaaa.txt" が削除の対象となってしまいます。

カテゴリ内ページ



Page
Top