Excelで複数のブックからシートを集約する作業は、特にデータの統合や集計を行う場合に頻繁に行われます。VBAを使用して自動化することで、手作業でのコピー作業を減らし、効率的に処理を進めることができます。この記事では、複数のブックにまたがるシートを一つのブックに集約するためのVBAコードの書き方を解説します。
VBAでのブックとシートの集約
VBAを使用することで、複数のExcelファイル(ブック)に含まれるシートを一つの集約用ブックにまとめることができます。ここでは、各ブックのすべてのシートを集約する方法に焦点を当て、VBAコードを紹介します。
基本的なアプローチとしては、まず対象となるファイル(ブック)を開き、各シートを順に集約用ブックにコピーする方法です。以下のコードは、複数のブックに含まれるシートをすべて集約するVBAコードの基本形です。
Sub ブック集約()
Dim sFileName As String
Dim sWB As Workbook
Dim dWB As Workbook
Dim WORK_FOLDER As String
Dim OUTPUT_FILE As String
Dim s As Long
WORK_FOLDER = Range("C2").Value ' 作業フォルダ
OUTPUT_FILE = Range("C3").Value ' 出力ファイル
Application.ScreenUpdating = False
sFileName = Dir(WORK_FOLDER & "*.xlsx") ' フォルダ内のファイルを取得
If sFileName = "" Then Exit Sub ' ファイルが無ければ終了
Set dWB = Workbooks.Add ' 新規集約用ブックを作成
Do
Set sWB = Workbooks.Open(Filename:=WORK_FOLDER & sFileName)
For i = 1 To sWB.Sheets.Count ' 各シートをコピー
sWB.Sheets(i).Copy After:=dWB.Sheets(dWB.Sheets.Count)
Next i
sWB.Close
sFileName = Dir() ' 次のファイルを取得
Loop While sFileName <> ""
dWB.SaveAs Filename:=OUTPUT_FILE ' 保存
dWB.Close
Application.ScreenUpdating = True
End Sub
シートを正しく集約するための注意点
このコードでは、各ブックのすべてのシートを順に集約用ブックにコピーします。重要なのは、コピー元のシートを順番に処理することと、集約用ブックのシート数を追跡して新しいシートが追加される場所を正確に指定することです。
また、各シートがコピーされる際に名前が重複しないように、シート名の変更や管理も考慮する必要があります。これを防ぐために、シート名を「シート1」「シート2」のようにインクリメントすることができます。
改善点:全シートを処理する方法
もしも最初に示されたコードが最初のシートのみをコピーする原因となっている場合、Forループ内で複数のシートを処理する方法を確認しましょう。以下の修正を行うことで、各ブックのすべてのシートを正しくコピーできます。
For i = 1 To sWB.Sheets.Count ' 各シートをコピー
sWB.Sheets(i).Copy After:=dWB.Sheets(dWB.Sheets.Count)
Next i
この修正により、各ブックのすべてのシートを順番に集約用ブックにコピーできるようになります。
シート名の変更方法
集約用ブックにシートをコピーした後、シート名が重複しないように変更することが重要です。シート名を「シート1」「シート2」のように連番で変更するコード例を以下に示します。
Dim newSheetName As String
newSheetName = "シート" & s + 1
activeSheet.Name = newSheetName
このコードは、コピーされたシートにユニークな名前を付けるために使用できます。
まとめ
VBAを使用して複数のExcelファイルからシートを集約する方法は非常に有用で、データの統合や集計を効率的に行うために欠かせない技術です。上記のコードを利用して、複数のシートを一つのブックにまとめることができ、さらにシート名の重複を避けるための方法も紹介しました。このように、VBAを活用することで、日々の作業を効率化することができます。
コメント