複数のExcelファイルが特定フォルダに格納されており、それらのデータを一括で読み込みたいというニーズは、業務の現場で非常によくあります。本記事では、指定フォルダ内のすべてのExcelブックから自動的にデータを集約するVBAマクロをご紹介いたします。
目次
使用シナリオの概要
- マクロ実行用のファイル「DataCollector.xlsm」を用意します。
- 同じディレクトリ内に「datafiles」フォルダを作成し、その中に複数のExcelファイル(
.xlsx
)を格納しておきます。 - 各ファイルの1行目は見出しであり、2行目以降のデータを読み取ります。
- 読み取ったデータは「DataCollector.xlsm」の先頭シートの末尾に追加していきます。
VBAコード:すべてのExcelファイルからデータをまとめて取り込む
Sub CollectDataFromAllFiles()
Dim wsTarget As Worksheet
Dim rngSource As Range
Dim wbSource As Workbook
Dim folderPath As String
Dim fileName As String
Set wsTarget = ThisWorkbook.Worksheets(1)
folderPath = ThisWorkbook.Path & "\datafiles\"
fileName = Dir(folderPath & "*.xlsx")
Do While fileName <> ""
Set wbSource = Workbooks.Open(folderPath & fileName)
With wbSource.Worksheets(1)
Set rngSource = .Range("A1").CurrentRegion
Set rngSource = rngSource.Offset(1).Resize(rngSource.Rows.Count - 1)
rngSource.Copy wsTarget.Cells(wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Row + 1, 1)
End With
wbSource.Close SaveChanges:=False
fileName = Dir
Loop
End Sub
解説
Dir
関数を用いて、対象フォルダ内の.xlsx
ファイルをすべて走査します。- 各ブックを一時的に開き、1行目(ヘッダー)を除いたデータ部分のみをコピーします。
- コピー先は、集計先ブックの最終行の直後に設定しています。
- 最後に、対象のブックを保存せずに閉じます。
利用上の注意点
- すべてのExcelファイルが同じ構造(A1に見出しがあり、同じ列構成)であることが前提です。
.xlsm
や.xls
ファイルは読み込まれません。必要に応じてDir(folderPath & "*.xls*")
に変更してください。- 取り込み先のシートが空の場合、最初に「ヘッダー行」を手動で用意しておくと安全です。
応用例
- ファイル名に応じて読み込む内容を変更する
- 特定の列のみ抽出する
- データ検証を追加する(重複除去、入力規則など)
まとめ
このマクロを使えば、一つ一つファイルを開くことなく、自動でデータを取り込む作業を大幅に効率化できます。業務における定型作業の自動化にぜひご活用ください。