複数ファイルを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
コピー元フォルダをソースに直接記載していますが、利用者に指定させたい場合は、以下記事を参照してください。
また、フォルダ直下のファイルだけではなくフォルダを再帰的に追いかけたい場合は、以下記事を参照してください。