VBAでBookの削除

投稿日: 2024年6月19日

Excel VBAを使ってブック(ファイル)を削除する方法について説明します。ファイルシステムオブジェクト(FSO)を使用してブックを削除します。

ブックを削除

ブックを削除する

注意点
重要なファイルを削除する前に、必要に応じてバックアップを取っておくことをお勧めします。削除してしまうと通常の方法では復活できません。

Sub DeleteWorkbook()
    Dim folderPath As String
    Dim filePath As String
    Dim fso As Object

    ' 削除するファイルのフォルダとファイル名を指定
    folderPath = "C:\Users\YourUsername\Documents\MyNewFolder\"
    filePath = folderPath & "NewWorkbook.xlsx"
    
    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' ファイルが存在するか確認して、存在する場合は削除
    If fso.FileExists(filePath) Then
        fso.DeleteFile filePath
        MsgBox "ファイルが削除されました: " & filePath
    Else
        MsgBox "ファイルが存在しません: " & filePath
    End If
    
    ' オブジェクトの解放
    Set fso = Nothing
End Sub

「Set fso = CreateObject(“Scripting.FileSystemObject”)」はファイルシステムオブジェクト(FSO)を作成します。「If fso.FileExists(filePath) Then fso.DeleteFile filePath」は指定したファイルが存在する場合、そのファイルを削除します。

削除前の予防策

fso.DeleteFileメソッドを使用して削除したファイルは、通常の方法では元に戻すことができません。これは、fso.DeleteFileメソッドがファイルを完全に削除し、ゴミ箱に移動しないためです。
削除されたファイルを復元するためには、事前にバックアップを取るか、ファイル削除を取り消すことができるシステムやソフトウェアを使用する必要があります。

削除前に確認メッセージを表示する

ユーザーに削除の確認を求めるメッセージを表示することで、誤ってファイルを削除するのを防ぎます。

Sub DeleteWorkbookWithConfirmation()
    Dim folderPath As String
    Dim filePath As String
    Dim fso As Object
    Dim response As VbMsgBoxResult

    ' 削除するファイルのフォルダとファイル名を指定
    folderPath = "C:\Users\YourUsername\Documents\MyNewFolder\"
    filePath = folderPath & "NewWorkbook.xlsx"
    
    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' ファイルが存在するか確認
    If fso.FileExists(filePath) Then
        ' 削除確認のメッセージを表示
        response = MsgBox("本当にこのファイルを削除しますか?" & vbCrLf & filePath, vbYesNo + vbExclamation, "ファイル削除の確認")
        
        If response = vbYes Then
            fso.DeleteFile filePath
            MsgBox "ファイルが削除されました: " & filePath
        Else
            MsgBox "ファイル削除がキャンセルされました。"
        End If
    Else
        MsgBox "ファイルが存在しません: " & filePath
    End If
    
    ' オブジェクトの解放
    Set fso = Nothing
End Sub
ファイルを移動してから削除する

直接削除するのではなく、まずファイルをバックアップフォルダに移動してから、必要に応じて削除する方法です。

Sub BackupAndDeleteWorkbook()
    Dim folderPath As String
    Dim backupFolderPath As String
    Dim filePath As String
    Dim backupFilePath As String
    Dim fso As Object

    ' 削除するファイルのフォルダとファイル名を指定
    folderPath = "C:\Users\YourUsername\Documents\MyNewFolder\"
    filePath = folderPath & "NewWorkbook.xlsx"
    backupFolderPath = "C:\Users\YourUsername\Documents\BackupFolder\"
    backupFilePath = backupFolderPath & "NewWorkbook.xlsx"
    
    ' ファイルシステムオブジェクトを作成
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' バックアップフォルダが存在しない場合は作成
    If Not fso.FolderExists(backupFolderPath) Then
        fso.CreateFolder backupFolderPath
    End If
    
    ' ファイルが存在するか確認
    If fso.FileExists(filePath) Then
        ' ファイルをバックアップフォルダに移動
        fso.MoveFile Source:=filePath, Destination:=backupFilePath
        MsgBox "ファイルがバックアップフォルダに移動されました: " & backupFilePath
        
        ' バックアップ後に削除する(必要に応じてコメントアウト)
        ' fso.DeleteFile backupFilePath
        ' MsgBox "ファイルが削除されました: " & backupFilePath
    Else
        MsgBox "ファイルが存在しません: " & filePath
    End If
    
    ' オブジェクトの解放
    Set fso = Nothing
End Sub

削除操作の前にユーザーに確認メッセージを表示するこうあバックアップを取ってから削除する事で、誤ってファイルを削除するリスクを減らします。

記事