【VBA】フォルダをまるっと削除する

この記事では
 ・フォルダの中にサブフォルダ/ファイルがあっても、
 ・フォルダをまるっと削除する方法
を記載します!
※フォルダの中が空でなくとも削除する方法を記載します。

削除したいフォルダの
 ・存在確認して
 ・存在する場合のみ削除
します!
※存在しないフォルダの削除を試みるとエラーとなるため。

PR

VBAコード

ここでは例として、デスクトップ配下のフォルダ「folder_001」を削除します。

Option Explicit

Sub sample()
    
    Dim fso As Object
    Dim folderFullPath As String
    
    '削除するフォルダのパスを指定
    folderFullPath = "C:\Users\user\Desktop\folder_001"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'フォルダの存在確認
    If fso.FolderExists(folderFullPath) Then
        '削除
        fso.DeleteFolder (folderFullPath)
    End If
    
    '後片付け
    Set fso = Nothing
    
End Sub

フォルダを削除する前に、フォルダの存在有無をしています(14行目)。
※存在しないフォルダの削除を試みるとエラーになるため

「FileSystemObject」の「deleteFolder」メソッドにより、フォルダを削除します(16行目)。

フォルダをまるっと削除するために、「RmDirステートメント」ではなく「FileSystemObject」の「deleteFolder」メソッドを使用します。

上記で削除すると、ゴミ箱にも残らず完全に削除されます。
ゴミ箱に残るように削除したい場合は、Windows APIを使用して削除します。
※詳細なやり方は割愛します。それなりに面倒であるためオススメしません。

PR

備考(RmDirステートメントを使用したフォルダ削除について)

フォルダの中が空であれば、「RmDirステートメント」でも削除できます。

ですが空でない場合、「RmDirステートメント」でフォルダの削除を試みると以下のエラーが発生します。

エラーメッセージ

パス名が無効です。

RmDirステートメントのエラーメッセージ
RmDirステートメントのエラーメッセージ

エラーメッセージからエラー理由(フォルダの中が空でない)を特定するのは困難です。


フォルダの中身を削除する手間を省くためにも、「FileSystemObject」の「deleteFolder」メソッドの使用をオススメします。

「RmDirステートメント」の使用はオススメしません。

なお「RmDirステートメント」で削除した場合も、ゴミ箱に残らず完全に削除されます。

PR

参考①

読み取り専用ファイルが格納されているフォルダを削除するには、ひと工夫が必要です。

詳細は以下の記事をご確認ください。

PR

参考②

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「FileSystemObject」の「deleteFolder」メソッド

PR

参考③

以下の詳細は、公式サイトをご確認ください。

●「RmDirステートメント」