フォルダ内のすべてのExcelファイルから自動でデータを取り込むVBAマクロ

複数の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*") に変更してください。
  • 取り込み先のシートが空の場合、最初に「ヘッダー行」を手動で用意しておくと安全です。

応用例

  • ファイル名に応じて読み込む内容を変更する
  • 特定の列のみ抽出する
  • データ検証を追加する(重複除去、入力規則など)

まとめ

このマクロを使えば、一つ一つファイルを開くことなく、自動でデータを取り込む作業を大幅に効率化できます。業務における定型作業の自動化にぜひご活用ください。

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

この記事を書いた人

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

目次