Excel VBA入門 | FileSystemObject-DeleteFolderメソッド(フォルダの削除)

Excel VBA入門

公開日:2017年6月2日

FileSystemObjectオブジェクトは、Windowsスクリプトテクノロジの1つであるScriptランタイムに属したオブジェクトです(Excel VBA上ではScriptingのメンバに位置づけされています)。

ここでは、フォルダを削除する方法としてFileSystemObjectオブジェクトのDeleteFolderメソッドを使用する方法を解説します。

FileSystemObject-DeleteFolderメソッド(フォルダのコピー)【Excel VBA入門】
目次

1.基本形

FSO.DeleteFolder FolderName[, Force]

変数説明
FSOFileSystemオブジェクト変数。FileSystemオブジェクトとして宣言して格納した変数です。
引数説明
FolderName削除するフォルダ名。フォルダのパスを指定します。ワイルドカードの使用により、複数フォルダの指定が可能。
Force省略可能。読み取り専用フォルダも削除するかどうかをTrue/Falseで設定します。既定はFalse(読み取り専用フォルダを削除しない)。

2.使用例

次の例では、デスクトップ上にあるTestフォルダを削除します。

Sub フォルダの削除()

Dim FSO As New FileSystemObject  '(1)
Dim MyPath As String             '(2)
'変数名は自由に設定してください。

MyPath = "C:\Users\ユーザー名\Desktop\TEST"  '(3)
'ユーザー名はあなたのPC環境に合わせて書き換えてください。

FSO.DeleteFolder MyPath  '(4)

End Sub

【解説】

(1)Dim FSO As New FileSystemObject
→FileSystemObjectオブジェクトを使用する際のおまじないです。FileSystemObjectオブジェクト変数FSOの宣言と変数FSOにFileSystemObjectオブジェクトの参照への代入を同時に1行で行っています。

おまじないには事前バインディングと実行時バインディングがありますが、ここでは事前バインディングを使用しています。

なお、FileSystemObjextオブジェクトを使用する場合には前もって、参照設定で「Microsoft Scripting Runtime」を有効にしておきます。

※FileSystemObjectオブジェクトの設定は「Excel VBA入門 | FileSystemObjectオブジェクト(概要)」を参照ください。

(2)Dim MyPath As String
→→削除するパス情報を代入する、String型変数MyPathを宣言しています。

(3)MyPath = "C:\Users\ユーザー名\Desktop\TEST"
→デスクトップ上にあるTestフォルダのパスを(2)で宣言した変数MyPathに代入しています。

パスはダブルクォーテーション「"」で囲みます。

パスは大文字と小文字を区別しません。従って、上記のパスは「"c:\USERS\ユーザー名\DESKTOP\tEST"」でも同じくデスクトップ上のTest.txtファイルとして認識します。

(4)FSO.DeleteFolder MyPath
→デスクトップ上のTestフォルダを削除します。

このコードは次のコードでも動作します。
FSO.DeleteFolder "C:\Users\ユーザー名\Desktop\Test"

簡単なプログラムであれば、特にMyPathを使用せずにそのままパス情報を入力してしまう方が分かりやすいと思います。今回は引数FolderNameに変数を使用できることを書きたかったため、あえて変数MyPathを宣言して使用しています。

引数のうち、2番目の「Force」は今回は指定していません。指定しない場合にはFalseが既定のため、読み取り専用ファイルは削除しません。

今回のケースでTestフォルダが読み取り専用ファイルである場合には、削除するフォルダが存在しないため実行時エラーとなります(実行時エラー70)。

Excel VBA DeleteForder

また、パス情報の間違いやフォルダが存在しない場合にもエラーとなります(実行時エラー76)。

Excel VBA DeleteForder

【補足】ゴミ箱は空になる

FileSystemObjectオブジェクトのDeleteFolderメソッドでファイルを削除した場合、手作業による削除のようにゴミ箱に移動することはありません。VBAを実行するとゴミ箱は空になった状態で終了します。ご注意ください。

3.RmDir関数を使用したプログラミングとの比較

フォルダの削除だけであれば、RmDir関数を使用すれば事足ります。FileSystemObjectオブジェクトを使用するまでもありません。

しかし、フォルダの削除以外にもファイル操作(移動、コピー、編集)やドライブ、フォルダ操作も行うプログラムを書く場合には、これら一連の操作が可能であるFileSystemObjectオブジェクトを採用した方がプログラミングしやすくなります。この場合には、フォルダの削除はDeleteFolderメソッドを使用した方がコードが見やすくなります。

また、RmDir関数では、削除フォルダの中にファイルが存在するとエラーになります。事前にKillステートメントを使用してファイルを全て削除する必要があります。

この点、DeleteFolderメソッドを使用すれば、フォルダ内のファイルも含めて全て削除することができるため、効率的にコーディングすることができます。