目次
はじめに
VBAでファイルの整理や管理を自動化していると、「不要になったフォルダを中身ごと、きれいに削除したい」という場面が出てきます。特に、一時的に作成した作業フォルダや、古いバックアップフォルダなどを一掃したい場合に便利です。
VBAの FileSystemObject (FSO) を使えば、こうしたフォルダの削除処理も簡単に行えます。
この記事では、FSOの DeleteFolder
メソッドを使って、指定したフォルダを内部のファイルやサブフォルダを含めて一括で削除する方法を、注意点と合わせて分かりやすく解説します。
⚠️ 注意: この記事で紹介するコードは、フォルダを完全に削除します。一度削除したフォルダやファイルは元に戻せませんので、対象のフォルダパスが正しいか、十分に確認してから実行してください。
フォルダを中身ごと削除するVBAサンプルコード
ここでは、Excelファイルと同じ階層にある「一時作業フォルダ」という名前のフォルダを、中身ごと全て削除するコードを作成します。
完成コード
Sub DeleteTargetFolder()
'== 変数を定義します ==
Dim objFSO As Object
Dim targetFolderPath As String
'== FileSystemObjectを生成します ==
Set objFSO = CreateObject("Scripting.FileSystemObject")
'== 削除対象のフォルダパスを設定します ==
targetFolderPath = ThisWorkbook.Path & "¥一時作業フォルダ"
'== フォルダが存在する場合のみ、削除処理を実行します ==
If objFSO.FolderExists(targetFolderPath) Then
'== ユーザーに最終確認を求めます ==
If MsgBox("以下のフォルダを完全に削除します。よろしいですか?" & _
vbCrLf & vbCrLf & targetFolderPath, _
vbQuestion + vbOKCancel, "最終確認") = vbCancel Then
MsgBox "処理を中断しました。", vbInformation
Exit Sub
End If
'== フォルダを削除します ==
objFSO.DeleteFolder targetFolderPath, True
MsgBox "フォルダの削除が完了しました。", vbInformation
Else
MsgBox "削除対象のフォルダが見つかりませんでした。", vbExclamation
End If
'== オブジェクトを解放します ==
Set objFSO = Nothing
End Sub
コードの解説
上記のコードがどのような処理を行っているか、重要なポイントを解説します。
Set objFSO = CreateObject("Scripting.FileSystemObject")
VBAでファイルシステムを操作するためのおまじないです。FileSystemObjectのインスタンスを生成しています。targetFolderPath = ThisWorkbook.Path & "¥一時作業フォルダ"
削除したいフォルダのパスを変数targetFolderPath
に格納しています。今回は、このマクロが書かれているExcelファイルと同じ場所にある「一時作業フォルダ」を対象にしています。このパスを間違えると、意図しないフォルダを削除してしまう危険性があるため、最も注意すべき箇所です。If objFSO.FolderExists(targetFolderPath) Then ... End If
FolderExists
メソッドを使って、そもそも削除対象のフォルダが存在するかどうかをチェックしています。存在しないフォルダを削除しようとするとエラーが発生するため、それを防ぐための重要な処理です。If MsgBox(...) = vbCancel Then ... End If
フォルダを完全に削除してしまう前に、ユーザーに最終確認を求めるメッセージボックス(MsgBox)を表示しています。万が一の操作ミスを防ぐための安全装置です。ここで「キャンセル」が押された場合は、処理を中断します。objFSO.DeleteFolder targetFolderPath, True
この一行が、フォルダを実際に削除する命令です。- 第1引数 (
targetFolderPath
): 削除するフォルダのパスを指定します。 - 第2引数 (
True
):True
を指定すると、フォルダが読み取り専用属性であっても強制的に削除します。指定しない(False
)場合、読み取り専用のフォルダは削除できずにエラーとなります。状況に応じて使い分けてください。
- 第1引数 (
まとめ
今回は、VBAのFSOを使って、フォルダを中身ごと完全に削除する方法を解説しました。
DeleteFolder
メソッドでフォルダを削除できる。- 処理を実行する前に
FolderExists
で存在確認を行う。 - 誤操作防止のため、ユーザーへの最終確認を入れることが強く推奨される。
非常に強力で便利な機能ですが、使い方を誤ると重要なデータを失いかねません。パスの指定には細心の注意を払い、テスト用のフォルダで十分に動作確認を行ってから、実際の業務で活用するようにしてください。