Excelで作業をしていると、複数のブックを同時に開いている場面に遭遇することがあります。そのようなときに「すべての開いているブックのデータを一つにまとめたい」と考える方も多いのではないでしょうか。
本記事では、現在開いているすべてのExcelブックからデータを1つのシートに集めるVBAコードをご紹介いたします。
目次
開いているブックからデータを集めるVBAコード
以下のコードは、**現在開いているすべてのブック(自身を除く)**の1枚目のシートから、見出しを除いたデータだけを「集計」シートにまとめるものです。
Sub CollectDataFromOpenWorkbooks()
    Dim summaryRange As Range
    Dim copyRange As Range
    Dim targetBook As Workbook
    Dim pasteSheet As Worksheet
    Dim lastRow As Long
    Set pasteSheet = ThisWorkbook.Worksheets(1)
    Set summaryRange = pasteSheet.Range("A1").CurrentRegion
    For Each targetBook In Workbooks
        If Not targetBook Is ThisWorkbook Then
            Set copyRange = targetBook.Worksheets(1).Range("A1").CurrentRegion
            Set copyRange = copyRange.Resize(copyRange.Rows.Count - 1).Offset(1)
            lastRow = pasteSheet.Cells(pasteSheet.Rows.Count, 1).End(xlUp).Row + 1
            pasteSheet.Cells(lastRow, 1).Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value
        End If
    Next
End Sub
このコードの活用ポイント
- ThisWorkbook:マクロを実行しているブックを除外します。
- Workbooksコレクション:現在開いているすべてのブックに対してループ処理を行います。
- CurrentRegion:セル範囲を自動で認識します。見出しも含まれるため、- Offset(1)と- Resize(-1)でデータ部分のみを抽出します。
- lastRow:追記位置を自動判定し、重複のないように順次貼り付けます。
注意点
- データ元となるブックの構成(1枚目のシート・A1始まりの表形式)を統一しておく必要があります。
- 表に空白行や空白列があると、CurrentRegionの認識が正しく動作しない場合があるため、整った表データを前提としてください。
- 必ず集約用のブックは一つだけ開いている状態にしてください(ループ中に誤って集約ブックを操作するのを避けるためです)。
まとめ
本記事では、VBAを使ってすべての開いているブックからデータを集約する方法をご紹介いたしました。
日々のデータ処理業務の効率化に役立てていただければ幸いです。

 
			 
			 
			 
			 
			 
			 
			