VBAで複数のブックとシートを一つのブックにまとめる方法

Visual Basic

Excelで複数のブックからシートを集約する作業は、特にデータの統合や集計を行う場合に頻繁に行われます。VBAを使用して自動化することで、手作業でのコピー作業を減らし、効率的に処理を進めることができます。この記事では、複数のブックにまたがるシートを一つのブックに集約するためのVBAコードの書き方を解説します。

VBAでのブックとシートの集約

VBAを使用することで、複数のExcelファイル(ブック)に含まれるシートを一つの集約用ブックにまとめることができます。ここでは、各ブックのすべてのシートを集約する方法に焦点を当て、VBAコードを紹介します。

基本的なアプローチとしては、まず対象となるファイル(ブック)を開き、各シートを順に集約用ブックにコピーする方法です。以下のコードは、複数のブックに含まれるシートをすべて集約するVBAコードの基本形です。

Sub ブック集約()
    Dim sFileName As String
    Dim sWB As Workbook
    Dim dWB As Workbook
    Dim WORK_FOLDER As String
    Dim OUTPUT_FILE As String
    Dim s As Long

    WORK_FOLDER = Range("C2").Value ' 作業フォルダ
    OUTPUT_FILE = Range("C3").Value ' 出力ファイル

    Application.ScreenUpdating = False

    sFileName = Dir(WORK_FOLDER & "*.xlsx") ' フォルダ内のファイルを取得

    If sFileName = "" Then Exit Sub ' ファイルが無ければ終了

    Set dWB = Workbooks.Add ' 新規集約用ブックを作成

    Do
        Set sWB = Workbooks.Open(Filename:=WORK_FOLDER & sFileName)
        For i = 1 To sWB.Sheets.Count ' 各シートをコピー
            sWB.Sheets(i).Copy After:=dWB.Sheets(dWB.Sheets.Count)
        Next i
        sWB.Close
        sFileName = Dir() ' 次のファイルを取得
    Loop While sFileName <> ""

    dWB.SaveAs Filename:=OUTPUT_FILE ' 保存
    dWB.Close
    Application.ScreenUpdating = True
End Sub

シートを正しく集約するための注意点

このコードでは、各ブックのすべてのシートを順に集約用ブックにコピーします。重要なのは、コピー元のシートを順番に処理することと、集約用ブックのシート数を追跡して新しいシートが追加される場所を正確に指定することです。

また、各シートがコピーされる際に名前が重複しないように、シート名の変更や管理も考慮する必要があります。これを防ぐために、シート名を「シート1」「シート2」のようにインクリメントすることができます。

改善点:全シートを処理する方法

もしも最初に示されたコードが最初のシートのみをコピーする原因となっている場合、Forループ内で複数のシートを処理する方法を確認しましょう。以下の修正を行うことで、各ブックのすべてのシートを正しくコピーできます。

For i = 1 To sWB.Sheets.Count ' 各シートをコピー
    sWB.Sheets(i).Copy After:=dWB.Sheets(dWB.Sheets.Count)
Next i

この修正により、各ブックのすべてのシートを順番に集約用ブックにコピーできるようになります。

シート名の変更方法

集約用ブックにシートをコピーした後、シート名が重複しないように変更することが重要です。シート名を「シート1」「シート2」のように連番で変更するコード例を以下に示します。

Dim newSheetName As String
newSheetName = "シート" & s + 1
activeSheet.Name = newSheetName

このコードは、コピーされたシートにユニークな名前を付けるために使用できます。

まとめ

VBAを使用して複数のExcelファイルからシートを集約する方法は非常に有用で、データの統合や集計を効率的に行うために欠かせない技術です。上記のコードを利用して、複数のシートを一つのブックにまとめることができ、さらにシート名の重複を避けるための方法も紹介しました。このように、VBAを活用することで、日々の作業を効率化することができます。

コメント

タイトルとURLをコピーしました