VBAサンプル集
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除

ExcelマクロVBAの実用サンプル、エクセルVBA集と解説
公開日:2017-04-04 最終更新日:2020-07-31

フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除

VBAでフォルダを削除するにはRmDirステートメントを使いますが、
サブフォルダやファイルが入っている場合は、RmDirはエラーとなります。


そこで、サブフォルダやファイルがある場合は、FileSystemObjectを使います。
・FileSystemObjectオブジェクトの使用方法 ・FileSystemObjectオブジェクトのプロパティとメソッド ・FileSystemObjectオブジェクトのメソッドの戻り値 ・FileSystemObjectオブジェクトの使用例 ・FileSystemObjectオブジェクトの関連記事と実践例

以下のサンプル使用時には、
「ツール」→「参照設定」で、「Microsoft Scripting Runtime」にチェックを付けてください。
参照設定しない場合は、
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
このように書き直してください。

FileSystemObject.DeleteFolder

Sub sample2()
  Dim objFSO As New FileSystemObject
  objFSO.DeleteFolder "フォルダのフルパス", True
  Set objFSO = Nothing
End Sub

これで、サブフォルダもファイルも、一括で全て削除できます。
この場合の問題点としては、

・一つでも削除できないファイルがあるとエラーとなる
・サブフォルダのどれかがエクスプローラー等で開かれているとエラーとなる

等々、結構削除できない場合が発生します。
また、フォルダは消さずにサブフォルダ内も含めて全てのファイルを削除するといった事が出来ません。

そこでも独自にフォルダ削除を作成し、もう少し融通の利くフォルダ削除を作成してみました。
最下層からファィルを削除してからフォルダ削除を順次行うVBAになります。

フォルダ(サブフォルダも全て)削除するVBA

'**********************************************************************
' sDir : 対象フォルダ
' sMsg : エラー発生時のメッセージ保存
' isOnlyFile : ファイルのみ削除する場合にTrue
'**********************************************************************
Function DelDir(ByVal sDir As String, _
        ByRef sMsg As String, _
        Optional ByVal isOnlyFile As Boolean = False) _
        As Boolean
  Dim objFSO As New FileSystemObject
  Dim objFolder As Folder
  sMsg = ""
  If Not objFSO.FolderExists(sDir) Then
    sMsg = "指定のフォルダは存在しません。"
    DelDir = False
    Exit Function
  End If
  Set objFolder = objFSO.GetFolder(sDir)
  Call DelDirectorys(objFolder, isOnlyFile, sMsg)
  If sMsg = "" Then
    DelDir = True
  Else
    DelDir = False
  End If
End Function

Sub DelDirectorys(ByVal objFolder As Folder, _
          ByVal isOnlyFile As Boolean, _
          ByRef sMsg As String)
  Dim objFolderSub As Folder
  Dim objFile As File
  On Error Resume Next
  For Each objFolderSub In objFolder.SubFolders
    Call DelDirectorys(objFolderSub, isOnlyFile, sMsg)
  Next
  For Each objFile In objFolder.Files
    objFile.Delete
    If Err.Number <> 0 Then
      sMsg = sMsg & "ファイル「" & objFile.Path & "」が削除できませんでした" & vbLf
      Err.Clear
    End If
  Next
  If Not isOnlyFile Then
    objFolder.Delete
    If Err.Number <> 0 Then
      sMsg = sMsg & "フォルダ「" & objFolder.Path & "」が削除できませんでした" & vbLf
      Err.Clear
    End If
  End If
  Set objFolderSub = Nothing
  Set objFile = Nothing
  On Error GoTo 0
End Sub

削除できないものがあっても、それは無視して次の削除を行うために、
エラー処理として、
On Error Resume Next
を組み込んでいます。
削除できなかったフォルダおよびファイルがあった場合は、
変数sMsgにその旨のメッセージを入れています。

使い方としては、以下のようになります。

Sub sample()
  Dim sMsg As String
  If DelDir(ThisWorkbook.Path & "\test", sMsg) Then
    MsgBox "削除終了"
  Else
    MsgBox sMsg
  End If
End Sub

ファイルのみ削除する場合は、
DelDir(ThisWorkbook.Path & "\test", sMsg, True)
として下さい。

使用するプロシージャーで、既にFileSystemObjectを生成していている場合は、
DelDirectorys
こちらを直接使ってもいでしょう。

このようなVBAコードが実際に必要になることは、そう多くは無いと思います。
いざという時の雛形として、またVBAの勉強用のサンプルとしてお使いください。



同じテーマ「マクロVBAサンプル集」の記事

ハイパーリンクからファイルのフルパスを取得する
ボタンに表示されているテキストを取得(Application.Caller)
Excelの表をPowerPointへ図として貼り付け
VBAで表やグラフをPowerPointへ貼り付ける
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除
Shift_JISのテキストファイルをUTF-8に一括変換
VBAコードの全プロシージャー・プロパティ一覧を取得
数式バーの高さを数式の行数で自動設定
図形オートシェイプ(Shape)の複数選択
GoogleスプレッドシートをExcelにインポートする
多階層フォルダ(ディレクトリ)の作成


新着記事NEW ・・・新着記事一覧を見る

SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)
SQL基礎問題6:成績表から教科ごとの点数ベスト3を抽出|SQL入門(2025-11-02)
SQL基礎問題5:複数のマスタテーブルの結合|SQL入門(2025-11-01)
SQL基礎問題4:2つのテーブルの不一致を抽出|SQL入門(2025-10-29)
SQL基礎問題3:文字列の一部をキーにして集計|SQL入門(2025-10-29)
SQL基礎問題2:文字列「-nn-」のnnが偶数のみ抽出|SQL入門(2025-10-28)
SQL基礎問題1:最大在庫数を持つ製品の在庫金額|SQL入門(2025-10-28)
「ADO + VBA」でSQLを実行するときのVBAサンプル|SQL入門(2025-10-28)


アクセスランキング ・・・ ランキング一覧を見る

1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ