【VBA】空フォルダを一括で削除する

VBAで
 ・空フォルダを一括で削除
できます!
サブフォルダ配下の空フォルダも一括で削除できます。

PR

VBAコード

可読性や保守性を良くするために、処理を以下の2つに分けて作成します。

2つの処理
  • メイン処理
    ・役割は「対象フォルダの指定」

  • 空フォルダ削除処理
    ・役割は
     ・「サブフォルダに対する再帰処理」
     ・「空フォルダの削除」


呼び出し関係は以下です。

呼び出し関係
呼び出し関係


ここでは例として
 ・フォルダ「C:\Users\user\Desktop\test」配下の
 ・空フォルダを一括で削除
します。
サブフォルダ配下の空フォルダも削除します。
※削除した空フォルダのパスをイミディエイトウインドウへ出力します。

実行前①
実行前①
実行前②
実行前②
実行前③
実行前③
Option Explicit

'WindowsAPI PathIsDirectoryEmpty
Declare PtrSafe Function PathIsDirectoryEmpty Lib "SHLWAPI.DLL" Alias "PathIsDirectoryEmptyA" (ByVal pszPath As String) As Boolean

'**********************************************************
'メイン処理
'**********************************************************
Sub main()
    
    Dim inputFolder As String
    Dim fso As Object
    Dim folder As Object
    
    '対象フォルダ
    inputFolder = "C:\Users\user\Desktop\test"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '空フォルダ削除処理を実行
    For Each folder In fso.GetFolder(inputFolder).SubFolders
        Call deleteEmptyFolders(folder.Path, fso)
    Next
    
    MsgBox "空フォルダを削除しました。"

    '後片付け
    Set fso = Nothing

End Sub

'**********************************************************
'空フォルダ削除処理
'**********************************************************
Private Sub deleteEmptyFolders(ByVal inputFolder As String, ByVal fso As Object)
    
    Dim folder As Object
    
    'サブフォルダの数だけ自身を再帰呼び出し
    For Each folder In fso.GetFolder(inputFolder).SubFolders
        Call deleteEmptyFolders(folder.Path, fso)
    Next

    '空フォルダを削除
    If PathIsDirectoryEmpty(inputFolder) = 1 Then
        fso.DeleteFolder (inputFolder)
        Debug.Print inputFolder & "を削除しました。"
    End If

End Sub

「対象フォルダ」の指定します(17行目)。

「空フォルダ削除処理」を実行します(22~24行目)。
※指定フォルダのサブフォルダに対して「空フォルダ削除処理」を実行します。
※よって仮に指定フォルダ(今回はフォルダ「C:\Users\user\Desktop\test」)が空フォルダであっても削除されません。

「空フォルダ削除処理」の中で、サブフォルダの数だけ自身を再帰呼び出しします(41~43行目)。

空フォルダを削除を削除します(46~49行目)。

PR

実行結果

空フォルダを一括で削除できました。
サブフォルダ配下の空フォルダも削除できました。

実行結果①
実行結果①
実行結果②
実行結果②
実行結果③
実行結果③
実行結果④
実行結果④
PR

参考①

上記のVBAコードは以下の記事を参考にして作成しました。

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



PR

参考②

空フォルダの一覧を作成することもできます。

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