更新日:、 作成日:

VBA フォルダの削除

はじめに

Excel VBA マクロでフォルダを削除する方法を紹介します。

DeleteFolder 関数を使って指定したフォルダを削除できます。

ワイルドカードを使って複数のフォルダや全てのフォルダを削除できます。

ファイルを削除するには「ファイルの削除」をご覧ください。

FileSystemObject について

ここでは VBA の標準の関数より便利な FileSystemObject を使った方法を紹介しています。基本的な使い方については「FileSystemObject ファイル操作の基礎」をご覧ください。

コードを見やすくするため FileSystemObject を参照設定しています。また、エラー処理は行っていません。

フォルダの削除

誤って必要なフォルダを削除しないように、パスには注意してください。

指定したフォルダの削除

Dim fso As FileSystemObject
Set fso = New FileSystemObject ' インスタンス化

Call fso.DeleteFolder("D:\TipsFolder", True) ' 指定したパスのフォルダを削除

' 後始末
Set fso = Nothing

fso.DeleteFolder 関数で指定したパスのフォルダを削除します。

第 1 引数に削除するフォルダのパスを指定します。フォルダが存在しないときはエラーが発生します。パスにはワイルドカードを指定できますが、詳しくは下記の「複数のフォルダを削除」をご覧ください。

第 2 引数に True を指定すると読み取り専用のフォルダを削除できます。False または省略すると読み取り専用のフォルダは削除しません。そのときはエラーが発生します。フォルダに読み取り専用が設定されていなくても、フォルダ内にあるフォルダやファイルに設定されているときは、それを削除しようとしたときにエラーが発生し、そこで処理が中断されます。それ以降のフォルダやファイルは削除されません。

サブフォルダを削除

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Dim pfl As Folder
Set pfl = fso.GetFolder("D:\TipsFolder") ' 親フォルダを取得

Dim fl As Folder
For Each fl In pfl.SubFolders ' サブフォルダの一覧を取得
    If fl.Name = "SubTips" Then ' 削除したいフォルダ
        fl.Delete (True)        ' フォルダを削除
    End If
Next

' 後始末
Set fso = Nothing

fso.GetFolder 関数で指定したパスの Folder オブジェクトを取得します。フォルダが存在しないときはエラーが発生します。

pfl.SubFolders プロパティから、そのフォルダ内にある Folder オブジェクトの一覧を取得できます。

fl.Name プロパティから、そのフォルダの名前を取得できます。これで削除したいフォルダを判定します。

fl.Delete 関数でそのフォルダを削除します。使い方は上記で説明した fso.DeleteFolder 関数と同じです。DeleteFolder の第 1 引数に、そのフォルダのパスが渡されます。

複数のフォルダを削除

ワイルドカードを使用して複数のフォルダをまとめて削除できます。

Dim fso As FileSystemObject
Set fso = New FileSystemObject

Call fso.DeleteFolder("D:\Tips*", True)        ' 複数のフォルダをまとめて削除
Call fso.DeleteFolder("D:\TipsFolder\*", True) ' すべてのフォルダを削除

' 後始末
Set fso = Nothing

fso.DeleteFolder 関数の第 1 引数にワイルドカードを指定して、一致する複数のフォルダをまとめて削除できます。1 つもフォルダが一致しないときはエラーが発生します。

使用できるワイルドカードには次のものがあります。

パターン 説明 使用例 一致例
*任意の長さの文字 (0 文字以上)あ*あ, あい, あいう
?任意の1文字 または 0 文字あ?あい, あか, あき

D:\Tips* を指定すると次のフォルダが一致します。

D:\Tips
D:\Tips1
D:\Tips12
D:\Tips123

D:\Tips? を指定すると次のフォルダが一致します。

D:\Tips
D:\Tips1
D:\Tips2

D:\TipsFolder\* を指定すると、TipsFolder フォルダ内のすべてのフォルダと一致します。