業務で複数のExcelファイルからデータを集計する作業はよくあるものですが、すべてのファイルを手動で開いてコピー・貼り付けするのは非常に手間がかかります。本記事では、閉じたExcelブックを自動で開いてデータをまとめるVBAマクロの作成方法をご紹介いたします。
目次
想定シナリオ
- 「集計マクロ.xlsm」というファイルを使用します。
- 同じフォルダ内の「import」フォルダに「sourceA.xlsx」「sourceB.xlsx」「sourceC.xlsx」が格納されています。
- 各ファイルの1行目は見出しで、2行目以降のデータを抽出します。
- 各ファイルの1枚目のシート(Sheet1)からデータを読み取ります。
- 取り込んだデータは、「集計マクロ.xlsm」の1枚目のシート(Sheet1)の末尾に順次追加します。
VBAコード例
Sub ImportDataFromClosedBooks()
Dim targetSheet As Worksheet
Dim importRange As Range
Dim importBook As Workbook
Dim fileList As Variant
Dim fileName As Variant
Dim folderPath As String
Set targetSheet = ThisWorkbook.Worksheets(1)
Set importRange = targetSheet.Range("A1").CurrentRegion
folderPath = ThisWorkbook.Path & "\import\"
fileList = Array("sourceA.xlsx", "sourceB.xlsx", "sourceC.xlsx")
For Each fileName In fileList
Set importBook = Workbooks.Open(folderPath & fileName)
With importBook.Worksheets(1)
Dim dataBody As Range
Set dataBody = .Range("A1").CurrentRegion
Set dataBody = dataBody.Offset(1).Resize(dataBody.Rows.Count - 1)
dataBody.Copy targetSheet.Cells(targetSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
End With
importBook.Close SaveChanges:=False
Next
End Sub
ポイント解説
Workbooks.Open
を使って閉じているファイルを一時的に開いています。.Offset(1).Resize(...)
により、1行目の見出しを除いた部分だけをコピー対象としています。Cells(Rows.Count, 1).End(xlUp).Row + 1
により、最終行の次の行にデータを追加しています。SaveChanges:=False
で外部ファイルの変更を保存せずに閉じています。
注意点
- 「import」フォルダは「集計マクロ.xlsm」と同じ場所に存在している必要があります。
- 各元ファイルのレイアウトが同一である必要があります。
- 処理中に元ファイルが開かれないよう注意してください(他ユーザーによるロックの防止)。
まとめ
このように、VBAを活用することで、複数の閉じたExcelブックから効率的にデータを収集することが可能になります。業務の自動化・効率化を図るうえで非常に有用なテクニックですので、ぜひ活用してみてください。