
Я использую программу, которая экспортирует данные на несколько листов, и мне нужно, чтобы все они были на одном листе друг под другом.
О рабочих листах - Их названия меняются при каждом экспорте, поэтому нет необходимости это определять, поскольку иногда существует более 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, поскольку он будет учитывать все обновления.