VBAで複数のシートを1枚のシートにconcatしたい

VBAを使用して複数のシートを1枚のシートに結合する方法はいくつかあります。以下に、そのいくつかの方法を示します。

方法1: 各シートのデータをコピーして貼り付ける

各シートのデータをコピーして、目的のシートに貼り付ける方法です。以下は、その例です。

vba
Sub CombineSheets() Dim ws As Worksheet Dim combinedSheet As Worksheet Dim lastRow As Long ' 結合先のシートを作成または指定します Set combinedSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) combinedSheet.Name = "CombinedData" ' 各シートのデータを結合先のシートにコピーして貼り付けます For Each ws In ThisWorkbook.Worksheets If ws.Name <> combinedSheet.Name Then lastRow = combinedSheet.Cells(combinedSheet.Rows.Count, "A").End(xlUp).Row ws.UsedRange.Copy combinedSheet.Cells(lastRow + 1, 1) End If Next ws End Sub

方法2: 各シートのデータを配列に取得してから結合する

各シートのデータを配列に取得し、配列を結合先のシートに書き込む方法です。これにより、処理が高速化されます。

vba
Sub CombineSheets() Dim ws As Worksheet Dim combinedSheet As Worksheet Dim combinedData() As Variant Dim lastRow As Long Dim i As Long ' 結合先のシートを作成または指定します Set combinedSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) combinedSheet.Name = "CombinedData" ' 各シートのデータを配列に取得し、結合先のデータ配列に追加します For Each ws In ThisWorkbook.Worksheets If ws.Name <> combinedSheet.Name Then lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row If lastRow > 1 Then combinedData = combinedSheet.Range("A" & combinedSheet.Rows.Count).Resize(lastRow, ws.UsedRange.Columns.Count).Value For i = 1 To lastRow combinedData(i, 1) = ws.Cells(i, 1).Value Next i combinedSheet.Range("A" & combinedSheet.Rows.Count).Resize(lastRow, ws.UsedRange.Columns.Count).Value = combinedData End If End If Next ws End Sub

これらのコードは、ExcelのVBAエディタで新しいマクロとして作成し、実行することで複数のシートを1枚のシートに結合します。

未分類

Posted by ぼっち