VBA フォルダ削除(RmDir)

■ 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もサブフォルダーには対応していないため、再帰処理が必要です。


■ まとめ(ポイント整理)

  1. RmDirは空のフォルダーのみ削除可能。
  2. 中身がある場合はKillFileSystemObjectを併用する。
  3. エラー処理を加えることで安定した動作が可能。
  4. 再帰的な削除はScripting.FileSystemObject.DeleteFolderが便利。

■ 補足:代替手段としてのShell利用

Windowsのcmdコマンドを利用する方法もあります。

Shell "cmd /c rmdir /s /q """ & folderPath & """", vbHide

この方法ではフォルダーが空でなくても強制的に削除できます。ただし、操作の可視性やエラーハンドリングに課題があるため慎重に使用すべきです。

タイトルとURLをコピーしました