- 締切済み
フォルダ内にある複数エクセルブックを一つにまとめたい
マクロを使って複数ブックを一つにマージしたいです。 どなたか宜しくお願いします。 フォルダに16個のエクセルブックがあります。ブックは4つのシートでできています。シートの列数は共通なのですが、行数が異なります。 これを新しいブックにコピペでつなげていきたいのです。 すみませんがどなたか宜しくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- rivoisu
- ベストアンサー率36% (97/264)
いろいろな場面を想定したら結構長くなってしまいました。 一応コメントを読めばわかるとは思います。 Sub シート集約() Dim i As Long Dim 初期シート数 As Long Dim 対象フォルダ As String Dim Bname As String Dim 転送先最終 As Long Dim 転送元最終 As Long Dim 最終列 As Long Dim 転送先sheet As Worksheet Dim 転送先Book As Workbook Dim 転送元sheet As Worksheet Dim 転送元Book As Workbook Dim シート有無 As Boolean '新しいBookを用意します。ここに集約して保存します。 Workbooks.Add Set 転送先Book = ActiveWorkbook '新しいBookを転送先Bookとする 初期シート数 = Sheets.Count '新しいBook の最初のシート名を変更します。(ダブらないように) For i = 1 To 初期シート数 Worksheets(i).Name = "qq" & i Next 対象フォルダ = "C:\VBAtest" '対象ファイルのあるフォルダー Bname = Dir(対象フォルダ & "\" & "*.xls") '最初のExcelファイル名を取得 While Bname <> "" 'ファイル名が空白になったら終了 Workbooks.Open (対象フォルダ & "\" & Bname) '対象ファイルを開く Set 転送元Book = ActiveWorkbook '対象ファイルを転送元Bookとする For Each 転送元sheet In 転送元Book.Worksheets '転送元Bookの全てにシートをひとつづつ '以下Nextまで 同じ名前のシートが転送先にあるかcheck シート有無 = False For Each 転送先sheet In 転送先Book.Worksheets If 転送元sheet.Name = 転送先sheet.Name Then シート有無 = True End If Next If シート有無 = True Then ' シートがあるときの処理 範囲指定してCopy Set 転送先sheet = 転送先Book.Worksheets(転送元sheet.Name) 転送先最終 = 転送先sheet.Cells(Rows.Count, 1).End(xlUp).Row '転送先シートの最終行 転送元最終 = 転送元sheet.Cells(Rows.Count, 1).End(xlUp).Row '転送元シートの最終行 最終列 = 転送元sheet.Cells(1, Columns.Count).End(xlToLeft).Column '最終転送列 転送元sheet.Activate '転送範囲をCopy 転送元sheet.Range(Cells(2, 1), Cells(転送元最終, 最終列)).Copy _ Destination:=転送先sheet.Cells(転送先最終 + 1, 1) Else 'シートのCopy 転送元sheet.Copy After:=転送先Book.Sheets(転送先Book.Sheets.Count) End If Next 転送元Book.Close '処理が終わったファイルをclose Bname = Dir() '次のExcelファイル名を取得 Wend Application.DisplayAlerts = False 'シートの削除と保存に確認メッセージを出さない For i = 1 To 初期シート数 '初期シートは不要なので削除 Worksheets(i).Delete Next 転送先Book.SaveAs 対象フォルダ & "\Sumsheet.xls" '対象ファイルのフォルダーに保存 転送先Book.Close 'Close Application.DisplayAlerts = True '[シートの削除と保存に確認メッセージを出さない]を元に End Sub テストするときはフォルダーのバックアップをしてくださいね。 対象のフォルダーにまとめたファイルもできますのでそのまま2回実行すると 変になりますからご注意。 わからないことがありましたらどうぞ