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

このページでは以下のフォルダ削除メソッドについて説明します。このメソッドを実行すると、削除対象フォルダ内のファイルおよびサブフォルダはすべて削除されます。

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

スポンサーリンク

使い分けの判断基準

1つのフォルダを削除する場合

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

複数のフォルダを削除する場合

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

fso.DeleteFolderの使用方法

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

構文
fso.DeleteFolder FolderSpec [, Force]
引数名 省略 説明
FolderSpec × 削除するフォルダを表す文字列を指定します。パスの最後の構成要素内ではワイルドカード文字を使用できます。 フォルダパスは絶対パス、相対パスともに指定可能です。
Force 読み取り専用のフォルダを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。

削除対象フォルダ内のファイルを編集中のときにフォルダ削除を行うとエラーが発生します。 On Errorステートメント でこのエラーが発生した場合の処理を記述しておくことをおすすめします。

1つのフォルダを削除する

引数 FolderSpec に削除対象のフォルダパスを指定します。

以下の例では aaa フォルダを削除します。

Sub sample_fs035_01()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim strPath     As String   '削除対象フォルダ

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    '削除対象フォルダ
    strPath = "C:\Users\xxx\Desktop\aaa"

    'フォルダの削除(読み取り専用の場合も削除)
    fso.DeleteFolder strPath, True

    'オブジェクト変数のクリア
    Set fso = Nothing
End Sub

  Setステートメント

複数のフォルダを1命令で削除する

引数 FolderSpecワイルドカードを使用して削除したいフォルダ群を表現します。以下の例では、Desktop フォルダ内の test から始まるすべてのフォルダを削除します。

Sub sample_fs035_02()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim strPath     As String   '削除対象フォルダ

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    '削除対象フォルダ
    strPath = "C:\Users\xxx\Desktop\test*"

    'フォルダの削除(読み取り専用の場合も削除)
    fso.DeleteFolder strPath, True

    'オブジェクト変数のクリア
    Set fso = Nothing
End Sub

  Setステートメント

folder.Deleteの使用方法

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

構文
folder.Delete [Force]
引数名 省略 説明
Force 読み取り専用のフォルダを削除するかどうかを True(削除する)または False(削除しない)で指定します。 既定値は False(削除しない)です。

削除対象フォルダ内のファイルを編集中のときにフォルダ削除を行うとエラーが発生します。
On Errorステートメントでこのエラーが発生した場合の処理を記述しておくことをおすすめします。

1つのフォルダを削除する

以下の例では aaa フォルダを削除します。

Sub sample_fs035_03()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim folderObj   As Object   'フォルダオブジェクト

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'ファイルオブジェクト取得
    Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\aaa")

    'フォルダの削除(読み取り専用の場合も削除)
    folderObj.Delete True

    'オブジェクト変数のクリア
    Set fso = Nothing
    Set folderObj = Nothing
End Sub

 fso.GetFolder  Setステートメント

フォルダ内のサブフォルダを1つずつ削除する

指定されたフォルダ内に存在するサブフォルダのうち、Like演算子を使用して、あるファイル名パターンにマッチするものだけを削除する例です。以下の例では、フォルダ名が “2013年##月”( # は任意の数字) のパターンにマッチするフォルダを削除します。

Sub sample_fs035_04()
    Dim fso         As Object   'ファイルシステムオブジェクト
    Dim folderObj   As Object   'フォルダオブジェクト
    Dim subfolderObj  As Object   'サブフォルダオブジェクト

    'メインオブジェクトの生成
    Set fso = CreateObject("Scripting.FileSystemObject")

    'フォルダオブジェクト取得
    Set folderObj = fso.GetFolder("C:\Users\xxx\Desktop\Data")

    For Each subfolderObj In folderObj.SubFolders
        'フォルダ名判定
        If subfolderObj.Name Like "2013年##月" Then
            'フォルダの削除(読み取り専用の場合も削除)
            subfolderObj.Delete True
        End If
    Next

    'オブジェクト変数のクリア
    Set fso = Nothing
    Set folderObj = Nothing
    Set subfolderObj = Nothing
End Sub

 fso.GetFolder For Each…Next  Like 演算子  Setステートメント

以下の図はマクロ実行前のDataフォルダの状態です。

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

上記サンプルマクロを実行すると、パターン”2013年##月”にマッチするフォルダ3つが削除されたことがわかります。

sample_fs035_04実行後のDataフォルダの内容
sample_fs035_04実行後のDataフォルダの内容

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

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