【EXCEL VBA】複数ファイルのデータを1シートにまとめたい(複数ブックを1シートにまとめたい)

複数ファイルを1シートにまとめる方法を紹介します。シチュエーションとしては、月ごとに整理された売上ファイルを1シートにまとめて年単位で分析する場合などを想定しています。

Sheets.UsedRange.Copyを使って解決する

コピー元SheetsオブジェクトのUsedRangeにてデータを選択しCopyをコールします。引数としてはコピー先のRangeオブジェクトを指定します。

コピー後、コピー先のセルを最下段に移動するために、End(xlDown).offset(1,0)で最下段に移動しています。

サンプルプログラムを確認する(コピペOK)

Option Explicit

Sub sample()
  Dim fso As FileSystemObject: Set fso = New FileSystemObject
  Dim f As file
  Dim srcWB As Workbook
  
  Dim destRange As Range
  Set destRange = ThisWorkbook.Sheets(1).Range("a1")
  
  ' GetFolder(フォルダ名).Filesでフォルダ配下のファイル一覧を取得
  For Each f In fso.GetFolder("C:\temp").Files
  
    Set srcWB = Workbooks.Open(f.path)
    
    srcWB.Sheets(1).UsedRange.Copy Destination:=destRange
    
    Set destRange = destRange.End(xlDown).Offset(1, 0)
    
    srcWB.Close savechanges:=False
  
  Next

End Sub

コピー元フォルダをソースに直接記載していますが、利用者に指定させたい場合は、以下記事を参照してください。

また、フォルダ直下のファイルだけではなくフォルダを再帰的に追いかけたい場合は、以下記事を参照してください。