複数の閉じたExcelファイルからデータを集計するVBAマクロの作り方

業務で複数の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ブックから効率的にデータを収集することが可能になります。業務の自動化・効率化を図るうえで非常に有用なテクニックですので、ぜひ活用してみてください。

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

この記事を書いた人

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

目次