Excel VBA入門 | FileSystemObject-DeleteFileメソッド(ファイルの削除)

Excel VBA入門

公開日:2017年5月27日

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

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

FileSystemObject-DeleteFileメソッド(ファイルの削除)【Excel VBA入門】
目次

1.基本形

FSO.DeleteFile FileName[, Force]

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

2.使用例

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

Sub ファイルの削除()

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

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

FSO.DeleteFile 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.txt"
→デスクトップ上にあるTest.txtファイルのパスを(2)で宣言した変数MyPathに代入しています。

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

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

(4)FSO.DeleteFile MyPath
→デスクトップ上のTest.txtファイルを削除します。

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

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

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

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

Excel VBA DeleteFile

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

Excel VBA DeleteFile

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

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

3.Killステートメントを使用したプログラミングとの比較

ファイル削除するだけであれば、Killステートメントを使用すれば事足ります。FileSystemObjectオブジェクトを使用するまでもありません。

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