📘 Excel逆引き事典

【VBA】特定のフォルダ内の全ファイルをバックグラウンドで別ブックとして保存する方法

手作業で大量のファイルを個別に保存するのは時間と労力がかかります。この記事では、特定のフォルダ内の全ワークシートを自動的にバックグラウンドで別のワークブックとして保存するVBAマクロを作成します。

サンプルコード

VBA
Option Explicit
Sub SaveSheetsAsSeparateBooks()
    Dim wb As Workbook, ws As Worksheet
    Dim folderPath As String, fileName As String, filePath As String
    Dim fso As Object, folder As Object, file As Object
    
    ' フォルダパスを指定
    folderPath = "C:\Users\User\Documents\ExampleFolder"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(folderPath)
    Application.ScreenUpdating = False
    For Each file In folder.Files
        If Right(file.Name, 4) = ".xls" Or Right(file.Name, 5) = ".xlsx" Then
            ' ファイルを開く
            Set wb = Workbooks.Open(file.Path)
            ' 各シートを別ブックとして保存
            For Each ws In wb.Sheets
                fileName = folderPath & "\" & ws.Name & Right(file.Name, Len(file.Name) - 4) + ".xlsx"
                ws.Copy
                With ActiveWorkbook
                    .SaveAs fileName:=fileName
                    .Close SaveChanges:=False
                End With
            Next ws
            wb.Close SaveChanges:=False ' 元のファイルを閉じる
        End If
    Next file
    Application.ScreenUpdating = True
End Sub

よくある質問

Q 元に戻せますか?

A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。また、ファイル形式がサポートされているかどうか確認してください。