【VBA】開いているすべてのブックからデータを一括集約する方法

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を使ってすべての開いているブックからデータを集約する方法をご紹介いたしました。
日々のデータ処理業務の効率化に役立てていただければ幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次