このページでは以下のフォルダ削除メソッドについて説明します。このメソッドを実行すると、削除対象フォルダ内のファイルおよびサブフォルダはすべて削除されます。
※1・・・ワイルドカードを使用することで複数のオブジェクトを同時に操作することが可能。
*(アスタリスク):任意の数(0以上)の文字を表します。
? (クエスチョン):任意の1文字を表します。
使い分けの判断基準
1つのフォルダを削除する場合
どちらのメソッドを使用しても機能的には同じになりますので、そのときの処理内容により判断します。通常、処理の途中でフォルダオブジェクトを取得済みであれば folder.Delete、フォルダオブジェクトを取得していないのであれば fso.DeleteFolderを使用します。
複数のフォルダを削除する場合
fso.DeleteFolderを使用します。削除対象のフォルダ群を上記ワイルドカードで表現する必要があります。ワイルドカードで表現できない場合は folder.Deleteでフォルダを1つずつ削除するしかありません。
fso.DeleteFolderの使用方法
引数に削除対象のフォルダパスを指定してフォルダの削除を行います。フォルダが読み取り専用の場合でも削除してよければ、引数 Force に True を指定します。
引数名 | 省略 | 説明 |
---|---|---|
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
複数のフォルダを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
folder.Deleteの使用方法
フォルダオブジェクト内に削除対象のフォルダパス情報を持っているので、引数に指定するのはオプションの Force のみです。その他の使用方法は fso.DeleteFolder に同じです。
引数名 | 省略 | 説明 |
---|---|---|
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
フォルダ内のサブフォルダを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フォルダの状態です。
上記サンプルマクロを実行すると、パターン”2013年##月”にマッチするフォルダ3つが削除されたことがわかります。