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