Excel — копирование данных с нескольких листов на один лист

Excel — копирование данных с нескольких листов на один лист

Я использую программу, которая экспортирует данные на несколько листов, и мне нужно, чтобы все они были на одном листе друг под другом.

О рабочих листах - Их названия меняются при каждом экспорте, поэтому нет необходимости это определять, поскольку иногда существует более 100 различных листов.

Внутри рабочих листов находятся данные из разных строк и столбцов (и мне нужно скопировать их до пустой строки на основной лист в следующую доступную строку, которая является пустой).

Рабочий лист, на который необходимо скопировать все данные, — изначально он будет пустым, однако мне нужно, чтобы все данные располагались друг над другом на основе копирования строк из других рабочих листов. (при необходимости у него может быть определенное имя)

Я новичок в VBA, поэтому надеюсь, что приведенное выше объяснение поможет.

Мой текущий VBA не работает:

 Sub SheetLoopPasteData()

Dim ws As Worksheet
Dim wsSheet As Worksheet
Set wsSheet = Sheets("Sheet2")

For Each ws In Worksheets
    ws.Activate
    variable = Cells(Rows.Count, 1).End(xlUp).Row
    Rows("1:" & variable).Copy _
    Destination:=wsSheet.Range("A" & (wsSheet.Range("A" & wsSheet.Rows.Count).End(xlDown).Row + 1))

Next



End Sub

решение1

Я хотел бы предложить VBA (макрос), который поможет вам скопировать используемый диапазон из всех рабочих листов в новый, что в точности соответствует консолидации данных.

Sub CombineData()

    Dim I As Long
    Dim xRg As Range

    On Error Resume Next

    Worksheets.Add Sheets(1)

    ActiveSheet.Name = "MasterSheet"

   For I = 2 To Sheets.Count
        Set xRg = Sheets(1).UsedRange

        If I > 2 Then
            Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)
        End If

        Sheets(I).Activate
        ActiveSheet.UsedRange.Copy xRg
    Next

End Sub

Как это работает:

  • Копировать&Вставитьэтот код как Модуль.
  • Макрос создаст новый лист в существующей рабочей книге с именемМастер-лист, который можно редактировать.
  • Вместо копирования данных из верхней строки в последнюю я использовалИспользованныйДиапазонметод, так как будет учитывать все обновления.

решение2

это очень хорошо, однако мне нужно, чтобы он справлялся с определенным диапазоном - можно ли это сделать, пожалуйста?


Я хотел бы предложить VBA (макрос), который поможет вам скопировать используемый диапазон из всех рабочих листов в новый, что в точности соответствует консолидации данных.

Подраздел CombineData()

Dim I As Long
Dim xRg As Range

On Error Resume Next

Worksheets.Add Sheets(1)

ActiveSheet.Name = "MasterSheet"

Для I = 2 To Sheets.Count Set xRg = Sheets(1).UsedRange

    If I > 2 Then
        Set xRg = Sheets(1).Cells(xRg.Rows.Count + 1, 1)
    End If

    Sheets(I).Activate
    ActiveSheet.UsedRange.Copy xRg
Next

Конец субтитра Как это работает:

Скопируйте и вставьте этот код как модуль. Макрос создаст новый лист в существующей рабочей книге с именем MasterSheet, который можно редактировать. Вместо копирования данных из верхней строки в последнюю я использовал метод UsedRange, поскольку он будет учитывать все обновления.

Связанный контент