- ベストアンサー
複数エクセルブックのシートを一つに合体する方法について
- 複数のエクセルブックのそれぞれのシートを一つに合体する方法について教えてください。
- A店、B店、C店など、複数のエクセルファイルがあります。各ファイルにはAマスタ、Bマスタ、Cマスタという3つのシートがあります。これらのシートをそれぞれのマスタごとにまとめ、全店分を一つのシートに合体させたいです。
- マクロを利用して一つずつファイルを開き、コピー&ペーストする方法では時間がかかるため、効率的な方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
マージ(単純結合)対象ファイル(ブック)とマクロブックは、全て同じフォルダにある。 対象シートの形式も全て同じ。 対象シートは、xFromとxToに連続したシート番号で設定する。 マージ結果は、マクロブックの同じ並びにあるシートに出力。(最初に空きのシートを用意する必要がある) Option Explicit Sub MergeBooksEachSheets() Const xFileSelector = "\*.xls*" Const xKey_Col = "A" Const xFrom = 1 Const xTo = 3 Const xNum = xTo - xFrom + 1 Const xHeads = 10 Dim xPath As Variant Dim xFileName As Variant Dim xName As Variant Dim xBook As Workbook Dim xSheet As Worksheet Dim xNoData As Boolean Dim nn As Long Dim xLast As Long Dim zLast As Long 'Application.ScreenUpdating = False Application.DisplayAlerts = False xNoData = True Set xBook = ThisWorkbook xPath = xBook.Path & "\" xName = xBook.Name xFileName = Dir(xPath & xFileSelector, vbNormal) Do Until xFileName = Empty If (xFileName <> xName) Then With Workbooks.Open(xPath & xFileName) If (xNoData) Then For nn = xFrom To xTo xBook.Sheets(nn).UsedRange.Clear Application.CutCopyMode = False .Sheets(xFrom).Rows("1:" & xHeads).Copy xBook.Sheets(nn).Range("A1").PasteSpecial Paste:=xlPasteValues '値だけを貼付け Next End If For nn = xFrom To xTo Application.CutCopyMode = False Set xSheet = .Sheets(nn) xLast = xSheet.Cells(Rows.Count, xKey_Col).End(xlUp).Row xSheet.Rows(xHeads + 1 & ":" & xLast).Copy zLast = xBook.Sheets(nn).Cells(Rows.Count, xKey_Col).End(xlUp).Row xBook.Sheets(nn).Range("A" & zLast + 1).PasteSpecial Paste:=xlPasteValues '値だけを貼付け Next Application.CutCopyMode = True .Close End With xNoData = False End If xFileName = Dir Loop If xNoData = True Then MsgBox ("No Data Found!!") End If Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
その他の回答 (2)
- tsubuyuki
- ベストアンサー率45% (699/1545)
> 何かいいマクロがございましたら教えていただけますでしょうか。 > マクロに関してあまり知識がございません 決してあなただけとは言いませんが、この手の質問をされる方は 見ず知らずの回答者に「こんなマクロを作ってくれ」と言う意図で このような質問をされるのでしょうか? 処理自体は決して難しい処理ではありません。 知識が無いなら、勉強されてはいかがでしょう? 考え方は 前準備として、一つのフォルダに全店分のファイルを集めておきます。 その上で処理を考えます。 ・このフォルダを指定 ・一つ目の店別ブックを開く ・「Aマスタ」シートの11行目以降をコピー ・統合ブックに新規シートを作る ・統合ブックの新規シートに貼り付け ・新規シートの名前を変更する ・一つ目の店別ブックを閉じる ・二つ目のブックを開く ・以下、フォルダ内のブックの数だけ繰り返し これを、B・Cマスタも同様に行うだけです。 繰り返し処理以外は「マクロの記録」で十分対応できる範囲です。 WEB上に情報はいくらでも落ちていますので、 調べながら作っていくと良いですよ。
- masatsan
- ベストアンサー率15% (179/1159)
良いマクロはありません。自分で作るしかないです。 障害は色々あるでしょうが、とりあえずは、新しいExcelを開いてからマクロを記録で ファイルを開いてシートを読み込むを繰り返す。 を参考にして作ったらいかがですか。 最終的には 新しいExcelを開いて 追記したいファイルを探す。 見つかったファイルを端から(for文とかで) 開いて、シートを指定して、11行めから読み込む 前回追加したシートの最終行に追加する。 繰り返す ですね。
お礼
ありがとうございます! 実行できました!!