Excel VBA FileSystemObjectでフォルダを削除

ファイル/フォルダ操作

今回は「FileSystemObject」オブジェクトを使用してファイルを削除する方法をご説明します。

「FileSystemObject」オブジェクトとは、ドライブ、フォルダ、ファイルを操作する事ができるオブジェクトです。

「FileSystemObject」オブジェクトの使い方も併せてご説明します。

他のファイル/フォルダの操作は次の記事をご覧ください。

1.FileSystemObjectの使い方

FileSystemObject」オブジェクトは、ドライブ、フォルダ、ファイルなどを操作する事ができるオブジェクトです。

FileSystemObjectを使用するには「CreateObject」メソッドを使用して次のように記載します。

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FileSystemObjectのメソッド一覧
メソッド操作内容
BuildPathパスの末尾に、指定したフォルダ名を追加したパスを返します
CopyFileファイルをコピーします
CopyFolderフォルダをコピーします
CreateFolder新しいフォルダを作成します
CreateTextFile新しいテキストファイルを作成します
DeleteFileファイルを削除します
DeleteFolderフォルダを削除します
DriveExistsドライブが存在するかどうか調べます
FileExistsファイルが存在するかどうか調べます
FolderExistsフォルダが存在するかどうか調べます
GetAbsolutePathName省略したパスから完全なパス名を返します
GetBaseName拡張子を除いたファイルのベース名を返します
GetDrive指定したDriveオブジェクトを返します
GetDriveName指定したドライブの名前を返します
GetExtensionNameファイルの拡張子を返します
GetFile指定したFileオブジェクトを返します
GetFileName指定したファイルの名前を返します
GetFolder指定したFolderオブジェクトを返します
GetParentFolderName指定したフォルダの親フォルダを返します
GetSpecialFolderシステムが使用する特別なフォルダのパスを返します
GetTempName一時的なファイル名を生成します
MoveFileファイルを移動します
MoveFolderフォルダを移動します
OpenTextFile指定したTextStreamオブジェクトを返します

2.フォルダの削除

書式は「FileSystemObject.DeleteFolder folderspec[, force] 」と書きます。

folderspec

削除するフォルダパスを指定します。

ワイルドカードを使用する事ができます。

folderspecは省略する事ができません。

指定したフォルダが存在しない場合、エラーが発生します。

また、フォルダ内のファイルやサブフォルダも削除するため、開いているファイルや読み取り専用等、フォルダ内に削除できないファイルが存在した場合にも、エラーが発生します

force

forceは読み取り専用ファイルの削除をTrue/Falseで指定します。

Trueを指定すると読み取り専用ファイルも削除可能です。

省略するとFalseを指定したことになり、読み取り専用ファイルは削除できません。

Falseを指定して読み取り専用ファイルが存在するとエラーとなります

3.エラーを回避する

フォルダを削除する際はエラーが2種類あります。

1つが指定したフォルダが存在しない場合で、2つ目が読み取り専用のファイルや、ファイルが開いている場合に削除できないために起こるエラーです。

両方のエラーを回避するためには、次の方法を使用します。

フォルダの存在を確認する

フォルダの存在を確認して、存在する場合のみ削除します。

エラーを回避するためには「Dir(フォルダパス, vbDirectory) = “”」でフォルダの存在を確認します。

もしくは「FolderExists」を使用します。

読み取り専用ファイルや開いているファイルを回避する

読み取り専用ファイルや、開いているファイルを削除しようとして発生するエラーを回避するためには、「On Error GoTo」でエラー発生時に、スキップしてエラーを回避します。

4.サンプルコード

If Dir(myFolder, vbDirectory) = “” Then」を「If FSO.FolderExists(myFolder) Then」と書き換えてもフォルダーの確認ができます。

指定したフォルダを削除する

Sub Sample1()

Dim FSO         As Object
Dim myFolder    As String

    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    
    myFolder = "C:\Sample\TEST1" '削除するフォルダパス
    
    
    If Dir(myFolder, vbDirectory) = "" Then 'フォルダの存在チェック
    
        MsgBox "フォルダが存在しません。"
        
        Exit Sub
        
    Else
    
        '削除できないファイルのエラーを回避する
        On Error GoTo ErrLabel
        
        FSO.DeleteFolder myFolder 'フォルダ削除
        
     End If
    
    Set FSO = Nothing
    
    Exit Sub

ErrLabel:

    If Err.Number = 70 Then

        MsgBox "削除できないファイルがあります。"
    
    End If
    
End Sub

上記サンプルコードはフォルダが存在しない場合、MsgBoxで「フォルダが存在しません」と表示されます。

また、フォルダが存在して、削除する際に削除できないファイルが存在してエラーとなった場合に、「ErrLabel:」にスキップしてエラーを表示します。

複数のフォルダを削除する

削除するフォルダパスに「*」を使用して、フォルダを複数削除します。

Sub Sample2()

Dim FSO         As Object
Dim myFolder    As String

    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    
    myFolder = "C:\Sample\TEST*" '削除するフォルダパス
    
    
    If Dir(myFolder, vbDirectory) = "" Then 'フォルダの存在チェック
    
        MsgBox "フォルダが存在しません。"
        
        Exit Sub
        
    Else
    
        '削除できないファイルのエラーを回避する
        On Error GoTo ErrLabel
        
        FSO.DeleteFolder myFolder 'フォルダ削除
        
     End If
    
    Exit Sub

    Set FSO = Nothing
    
ErrLabel:

    If Err.Number = 70 Then

        MsgBox "削除できないファイルがあります。"
    
    End If
    
End Sub
タイトルとURLをコピーしました