複数の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*")に変更してください。
- 取り込み先のシートが空の場合、最初に「ヘッダー行」を手動で用意しておくと安全です。
応用例
- ファイル名に応じて読み込む内容を変更する
- 特定の列のみ抽出する
- データ検証を追加する(重複除去、入力規則など)
まとめ
このマクロを使えば、一つ一つファイルを開くことなく、自動でデータを取り込む作業を大幅に効率化できます。業務における定型作業の自動化にぜひご活用ください。
【AI×就労支援】Neuro Dive(ニューロダイブ)で先端ITを学び、スペシャリストとしての就職を目指しませんか?
最後に宣伝をさせてください。
「AIやデータサイエンスを仕事にしたい」 「でも、独学には限界が…」
そんな方に知ってほしいのが、日本初の”先端IT特化型”就労移行支援『Neuro Dive』です。
IT職種への就職率80%超、職場定着率95%超という実績は、信頼の証。 障害のある方の「学びたい」を「仕事」に繋げるプロフェッショナルです。
ご興味があれば、ぜひ公式サイトをチェックしてみてください。


 
			 
			 
			 
			 
			 
			 
			