VBAで
・複数のシート上の表を
・1つのシートに纏める方法
を紹介します!
各シート上の表に見出し行があっても、
上手いこと1つのシートに纏めます!
VBAコード
ここでは例として、
・複数のシート「data_*」上にあるセル「B2」から始まる表を
・1つのシートに纏める方法
を紹介します。
Option Explicit
Sub main()
Dim inputSheetName As String
Dim outputSheetName As String
Dim startRange As String
Dim outputSheet As Worksheet
Dim sheet As Worksheet
Dim sheetCount As Long
Dim outputRow As Long
Dim outputColumn As Long
Dim inputRange As Range
'入力シート名
inputSheetName = "data_*"
'出力シート名
outputSheetName = "merge"
'表の開始セル
startRange = "B2"
'既に出力シートが存在する場合は削除
For Each sheet In ThisWorkbook.Worksheets
If sheet.Name = outputSheetName Then
'確認メッセージを非表示
Application.DisplayAlerts = False
'シート削除
Worksheets(outputSheetName).Delete
'確認メッセージを表示
Application.DisplayAlerts = True
End If
Next
'出力シートを新規作成
Set outputSheet = Worksheets.Add(After:=Worksheets(Worksheets.Count))
outputSheet.Name = outputSheetName
'処理したファイル数を示すカウンタ変数
sheetCount = 0
'書き出し列
outputColumn = outputSheet.Range(startRange).Column
'書き出し行
outputRow = outputSheet.Range(startRange).Row
'シート数分繰り返し
For Each sheet In ThisWorkbook.Worksheets
'入力シートの場合のみ処理を行う
If sheet.Name Like inputSheetName Then
'カウンタ変数をカウントアップ
sheetCount = sheetCount + 1
'表の範囲を指定
Set inputRange = sheet.Range(startRange).CurrentRegion
'1シート目で無い場合は、表の範囲を1行下にずらす(見出し行を除く)
If sheetCount <> 1 Then
Set inputRange = inputRange.Offset(1, 0).Resize(inputRange.Rows.Count - 1)
End If
'出力シートへ出力(コピペ)
inputRange.Copy outputSheet.Cells(outputRow, outputColumn)
'次の書き出し行を取得
outputRow = outputSheet.Cells(Rows.Count, outputColumn).End(xlUp).Row + 1
End If
Next
'出力シートの列幅を自動調整
outputSheet.Range(startRange).CurrentRegion.Columns.AutoFit
End Sub
実行結果
複数のシート上の表を1つのシートに纏めることができました。
参考①
1つのシートに纏めた表を、CSVファイルとして出力することもできます。
詳細は以下の記事をご確認ください。
参考②
1つのシートに纏めた表を、並び替え(ソート)したほうが良いかもしれません。
並び替える(ソートする)方法は、以下の記事をご確認ください。
参考③
1つのシートに纏めた表から、不要なデータを削除したほうが良いかもしれません。
オートフィルタを使用して不要なデータを削除できます。
詳細は以下の記事をご確認ください。