非プログラマーでもできる!業務の自動化

【Excel VBA】フォルダ内の全ファイルとサブフォルダを削除する方法

当ページのリンクの一部に広告が含まれています。

課題・悩み「フォルダ内のファイルの削除を自動化したい」

解決策「Excel VBAを使用して指定フォルダ内の全ファイルとサブフォルダを削除する」を解説

Excel VBAを使って日々の業務を効率化する方法は数多くあります。

その中でも、特定のフォルダ内にあるファイルやサブフォルダを一括で削除するマクロの作成は、定期的なクリーンアップ作業において非常に役立ちます。

この記事では、Excel VBAを用いてフォルダ内のすべてのファイルとサブフォルダを削除する方法を詳しく解説します。

この記事では

【Excel VBAを使用して指定フォルダ内の全ファイルとサブフォルダを削除する】を図解で解説しています。

VBAマクロファイルを配布中。

以下のボタンよりダウンロードしてください。

目次

フォルダ内のフォルダをすべて削除するVBAマクロのコード

このVBAマクロは、Excelシートの指定されたセルに入力されたフォルダパスを基に、そのフォルダ内に存在するすべてのファイルやサブフォルダを削除するものです。

具体的には、次のステップで処理を行います:

Sub DeleteAllFilesAndFolders()
    Dim ws As Worksheet
    Dim folderPath As String
    Dim fso As Object
    Dim folder As Object
    Dim file As Object
    Dim subFolder As Object

    ' シート1を設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' フォルダパスをセルB1から取得
    folderPath = ws.Range("B1").Value
    
    ' フォルダパスが空でないか確認
    If folderPath = "" Then
        MsgBox "フォルダパスが入力されていません。"
        Exit Sub
    End If
    
    ' フォルダパスの末尾にバックスラッシュを追加(必要な場合)
    If Right(folderPath, 1) <> "\" Then
        folderPath = folderPath & "\"
    End If
    
    ' FileSystemObjectを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダが存在するか確認
    If Not fso.FolderExists(folderPath) Then
        MsgBox "指定されたフォルダは存在しません。"
        Exit Sub
    End If
    
    ' フォルダオブジェクトを取得
    Set folder = fso.GetFolder(folderPath)
    
    ' フォルダ内のすべてのファイルを削除
    For Each file In folder.Files
        file.Delete True
    Next file
    
    ' フォルダ内のすべてのサブフォルダを削除
    For Each subFolder In folder.SubFolders
        subFolder.Delete True
    Next subFolder
    
    MsgBox "すべてのファイルとフォルダが削除されました。"
End Sub

1. フォルダパスを取得

2. フォルダパスの検証

3. フォルダオブジェクトの取得

4. フォルダ内のファイルとサブフォルダの削除

注意点

データが大量にある場合、処理に時間がかかることがあり、また、VBAマクロで実行した操作は元に戻せません。

処理ごとの解説

シートの設定とフォルダパスの取得

Sheet1 のセル B1 からフォルダパスを取得します。

このフォルダパスを基に以降の処理を行います。

Set ws = ThisWorkbook.Sheets("Sheet1")
folderPath = ws.Range("B1").Value

フォルダパスの検証

フォルダパスが入力されているか、また末尾にバックスラッシュが付いているかを確認します。

If folderPath = "" Then
MsgBox "フォルダパスが入力されていません。"
Exit Sub
End If
If Right(folderPath, 1) <> "\" Then
folderPath = folderPath & "\"
End If

FileSystemObjectの作成とフォルダの存在確認

FileSystemObject を作成し、指定されたフォルダが存在するか確認します。

存在しない場合は処理を終了します。

Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(folderPath) Then
MsgBox "指定されたフォルダは存在しません。"
Exit Sub
End If
Set folder = fso.GetFolder(folderPath)

フォルダ内のファイルとサブフォルダの削除

フォルダ内に存在するすべてのファイルとサブフォルダをループで取得し、それぞれ削除します。

For Each file In folder.Files
file.Delete True
Next file
For Each subFolder In folder.SubFolders
subFolder.Delete True
Next subFolder

注意点

大量データの場合

フォルダ内のファイルやサブフォルダが多い場合、処理に時間がかかることがあります。

処理中はExcelが応答しない状態になる場合があります。

操作の不可逆性

VBAマクロで削除したファイルやフォルダは元に戻せません。

実行前に必ずバックアップを取ることをお勧めします。

必要な環境設定

信頼できる場所に保存

VBAマクロが含まれるExcelファイルを信頼できる場所に保存する必要があります。

マクロの有効化

Excelのセキュリティ設定でマクロが有効になっていることを確認してください(ファイル > オプション > セキュリティセンター > セキュリティセンターの設定 > マクロの設定)。

変更が必要な箇所の解説

シート名の設定

マクロがフォルダパスを取得するシート名を自分の環境に合わせて変更します。

Set ws = ThisWorkbook.Sheets("Sheet1")
 Set ws = ThisWorkbook.Sheets("変更するシート名")

フォルダパスのセル位置

マクロがフォルダパスを取得するセル位置を自分の環境に合わせて変更します。

folderPath = ws.Range("B1").Value
 folderPath = ws.Range("変更するセル位置").Value

具体的な例

例えば、シート名を “DataSheet” に変更し、フォルダパスがセル “C2” に入力されている場合の変更点は以下の通りです。

Set ws = ThisWorkbook.Sheets("DataSheet")
folderPath = ws.Range("C2").Value

関連するVBAマクロ

上記のファイルに利用されている他のVBAマクロについては、以下の投稿をご覧ください。

まとめ

Excel VBAを利用して特定のフォルダ内にあるすべてのファイルとサブフォルダを削除する方法について解説しました。

このマクロは、定期的なクリーンアップ作業やフォルダの整理に非常に便利です。

設定や注意点をしっかりと把握して、安全に利用してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次