📘 Excel逆引き事典

【VBA】特定のフォルダ内の全ファイルを配列を使って高速に別ブックとして保存する方法

日々の業務の中で、大量のデータファイルを個々のブックに分割して保存することがあります。この作業は非常に時間がかかりますが、VBAを使用することで高速化が可能です。本記事では、特定のフォルダ内のすべてのワークシートを配列を使って高速に別のブックとして保存する方法を紹介します。

サンプルコード

VBA
Option Explicit
Sub SaveSheetsAsSeparateBooks()
    Dim wb As Workbook, ws As Worksheet
    Dim filePath As String, fileSpec As String, fileName As String
    Dim folderPath As String, arrFiles() As Variant
    Dim i As Long
    
    ' フォルダパスを指定
    folderPath = "C:\Users\Username\Documents\SampleFolder"
    
    ' フォルダ内のすべてのExcelファイルを配列に格納
    fileSpec = Dir(folderPath & "*.xlsx")
    i = 0
    Do While fileSpec <> ""
        ReDim Preserve arrFiles(1 To i + 1)
        arrFiles(i + 1) = folderPath & fileSpec
        fileSpec = Dir()
        i = i + 1
    Loop
    
    ' フォルダ内のすべてのファイルを処理
    For Each fileName In arrFiles
        Set wb = Workbooks.Open(fileName)
        Application.ScreenUpdating = False
        For Each ws In wb.Sheets
            ws.Copy
            ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & ws.Name & ".xlsx"
            ActiveWorkbook.Close SaveChanges:=True
        Next ws
        wb.Close SaveChanges:=False
    Next fileName
    Application.ScreenUpdating = True
End Sub

よくある質問

Q 元に戻せますか?

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

Q エラーが出たら?

A.
シート名や列番号が正しいか確認してください。また、ファイルパスや拡張子の指定が正確であるかもチェックしてください。