私は流用させてもらっています。私の場合まず
Sub ブックを統合するマクロ()
Dim sFile As String
Dim sWB As Workbook, dWB As Workbook
Dim dSheetCount As Long
Dim i As Long
Const SOURCE_DIR As String = "D:\新しいフォルダ"
Const DEST_FILE As String = "D:\臨時フォルダ\AllReports.xlsx"
Application.ScreenUpdating = False
sFile = Dir(SOURCE_DIR & "*.xls*")
If sFile = "" Then Exit Sub
Set dWB = Workbooks.Add(DEST_FILE)
dSheetCount = dWB.Worksheets.Count
Do
Set sWB = Workbooks.Open(Filename:=SOURCE_DIR & sFile)
sWB.Worksheets("報告書").Copy After:=dWB.Worksheets(dSheetCount)
ActiveSheet.Name = Range("A1").Value
sWB.Close
sFile = Dir()
Loop While sFile <> ""
Application.DisplayAlerts = False
For i = dSheetCount To 1 Step -1
dWB.Worksheets(i).Delete
Next i
Application.DisplayAlerts = True
dWB.SaveAs Filename:=DEST_FILE
dWB.Close
Application.ScreenUpdating = False
End Sub
で ブックを統合したAllReports.xlsxに下記マクロを貼り付けて実行しています。
Sub シートを統合するマクロ()
'★AllReports.xlsxにこのマクロをコピー貼り付けして実行すること
Dim sWS As Worksheet 'データシート(コピー元)
Dim dWS As Worksheet '集約用シート(コピー先)
Set dWS = Worksheets.Add
dWS.Name = "AllData"
'集約用シートの2行目以降を削除
dWS.UsedRange.Offset(1, 0).Clear
'各シートの2行目以降のデータを、集約用シートの末尾にコピー
For Each sWS In Worksheets
If sWS.Name <> dWS.Name Then
With sWS.UsedRange
'コピー元シートにデータが1件以上ある場合
If .Rows.Count > 1 Then
.Offset(1, 0).Resize(.Rows.Count - 1).Copy _
Destination:=dWS.Cells(Rows.Count, 1). _
End(xlUp).Offset(1, 0)
End If
End With
End If
Next sWS
'集計用シートをA列で並べ替え
'dWS.UsedRange.Sort Key1:=Range("A1"), Header:=xlYes
End Sub
これで一応複数ブックのデータを1ブックの1シートに統合しています。
もっといい方法があると思いますので識者の回答をお待ちください。