■ RmDirの基本構文
RmDir path
path
は削除したいフォルダーのパス(文字列)を指定します。- 例:
RmDir "C:\TestFolder"
■ 使用条件と前提
RmDir
は、空のフォルダーしか削除できません。中にファイルや他のフォルダーが存在する場合、エラー(エラー番号 75:パスが見つかりませんなど)が発生します。したがって、削除前に対象フォルダーが空であることを確認する必要があります。
■ 基本的な使用例
Sub DeleteFolder()
Dim folderPath As String
folderPath = "C:\TestFolder"
If Dir(folderPath, vbDirectory) <> "" Then
RmDir folderPath
MsgBox "フォルダーを削除しました。"
Else
MsgBox "フォルダーが存在しません。"
End If
End Sub
この例では、まずフォルダーの存在をDir
関数で確認し、存在すればRmDir
で削除します。
■ フォルダーが空か確認する処理
実際のシナリオでは、フォルダーが空であるかどうか確認するのが一般的です。以下に簡単な確認方法を示します。
Function IsFolderEmpty(folderPath As String) As Boolean
Dim file As String
file = Dir(folderPath & "\*.*")
If file = "" Then
IsFolderEmpty = True
Else
IsFolderEmpty = False
End If
End Function
この関数を使って、削除前に中身があるかどうかを判定できます。
■ 中身があるフォルダーを削除するには?
RmDir
では空でないフォルダーを削除できないため、フォルダー内のすべてのファイルとサブフォルダーを再帰的に削除してからRmDir
を使う必要があります。
以下は中身のあるフォルダーを完全に削除する関数の例です:
Sub DeleteFolderRecursive(folderPath As String)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists(folderPath) Then
fso.DeleteFolder folderPath, True
End If
End Sub
このコードでは、Scripting.FileSystemObject
を利用することで、RmDir
より強力な削除が可能です。
■ エラー処理の追加
RmDir
は対象のフォルダーが存在しない場合や、削除不可能な状態(アクセス権限、使用中など)で実行されるとエラーになります。これを防ぐために、エラー処理を加えるのが推奨されます。
Sub SafeRmDir(folderPath As String)
On Error GoTo ErrorHandler
If Dir(folderPath, vbDirectory) <> "" Then
RmDir folderPath
MsgBox "フォルダーを削除しました。"
Else
MsgBox "フォルダーが見つかりません。"
End If
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました:" & Err.Description
End Sub
■ RmDirの用途まとめ
メリット:
- シンプルで軽量。
- VBA標準関数で動作が早い。
デメリット:
- 空フォルダーしか削除できない。
- エラーが出やすい(中身があったり、ロックされていたりする場合)。
■ RmDirとKillの違い
RmDir
:空のフォルダーを削除。Kill
:ファイルを削除するための命令。
例えば、フォルダー内のファイルを削除したい場合はKill "C:\TestFolder\*.*"
のように使います。ただし、Kill
もサブフォルダーには対応していないため、再帰処理が必要です。
■ まとめ(ポイント整理)
RmDir
は空のフォルダーのみ削除可能。- 中身がある場合は
Kill
やFileSystemObject
を併用する。 - エラー処理を加えることで安定した動作が可能。
- 再帰的な削除は
Scripting.FileSystemObject.DeleteFolder
が便利。
■ 補足:代替手段としてのShell利用
Windowsのcmd
コマンドを利用する方法もあります。
Shell "cmd /c rmdir /s /q """ & folderPath & """", vbHide
この方法ではフォルダーが空でなくても強制的に削除できます。ただし、操作の可視性やエラーハンドリングに課題があるため慎重に使用すべきです。