Здравствуйте! Необходимо скопировать данные с нескольких листов в один (макросом). Особенности: Все листы находятся на одной книге Итоги выгружаются на Лист1 (в столбцы ABC) Данные берутся из Листа3, Листа4, Листа.. (столбцы ABH) Итоговый копируемый массив данных должен быть отфитрован по следующим условиям: 1) удалить все дубликаты по столбцы А (т.е если в строке по столбцу А есть дубликаты, должна удаляться вся строка). 2) оставить только те строки, в столбце А которых цифры (на листах3-5-.. в столбце А находятся и цифры и слова) 3) удалить все значения по столбцу А, которые меньше 5 (т.е. если в строке по столбцу А есть значения меньше 5, нужно удалить всю строку). Очень желательно получить объяснение (комментарии по ходу кода) о том, где и что нужно заменить, для: выбора нужных листов, нужных столбцов, фильтра "меньше 5". На одном из сайтов нашел похожий пример, но там было несколько проблем Данные копировались со всех листов в отдельный файл - не понял, как задать копирование с определенных листов Данные копировались или отдельной яецкой, или, диапазоном, или всем листом - не понял, как выбрать определенные столбцы Отсутствовал фильтр
Файл с примером прикрепил. Пример макроса (описал проблемы выше): [vba]
Код
Sub CollectDataFromAllSheets() Dim ws As Worksheet
Set wbCurrent = ActiveWorkbook Workbooks.Add Set wbReport = ActiveWorkbook
'копируем на итоговый лист шапку таблицы из первого листа wbCurrent.Worksheets(1).Range("A1:D1").Copy Destination:=wbReport.Worksheets(1).Range("A1")
'проходим в цикле по всем листам исходного файла For Each ws In wbCurrent.Worksheets
'определяем номер последней строки на текущем листе и на листе сборки n = wbReport.Worksheets(1).Range("A1").CurrentRegion.Rows.Count
'задаем исходный диапазон, который надо скопировать с каждого листа - любой вариант на выбор: Set rngData = ws.Range("A1:D5") 'фиксированный диапазон или Set rngData = ws.UsedRange 'всё, что есть на листе или Set rngData = ws.Range("F5").CurrentRegion 'область, начиная от ячейки F5 или Set rngData = ws.Range("A2", ws.Range("A2").SpecialCells(xlCellTypeLastCell)) 'от А2 и до конца листа
'копируем исходный диапазон и вставляем в итоговую книгу со следующей строки rngData.Copy Destination:=wbReport.Worksheets(1).Cells(n + 1, 1)
Next ws End Sub
[/vba]
Здравствуйте! Необходимо скопировать данные с нескольких листов в один (макросом). Особенности: Все листы находятся на одной книге Итоги выгружаются на Лист1 (в столбцы ABC) Данные берутся из Листа3, Листа4, Листа.. (столбцы ABH) Итоговый копируемый массив данных должен быть отфитрован по следующим условиям: 1) удалить все дубликаты по столбцы А (т.е если в строке по столбцу А есть дубликаты, должна удаляться вся строка). 2) оставить только те строки, в столбце А которых цифры (на листах3-5-.. в столбце А находятся и цифры и слова) 3) удалить все значения по столбцу А, которые меньше 5 (т.е. если в строке по столбцу А есть значения меньше 5, нужно удалить всю строку). Очень желательно получить объяснение (комментарии по ходу кода) о том, где и что нужно заменить, для: выбора нужных листов, нужных столбцов, фильтра "меньше 5". На одном из сайтов нашел похожий пример, но там было несколько проблем Данные копировались со всех листов в отдельный файл - не понял, как задать копирование с определенных листов Данные копировались или отдельной яецкой, или, диапазоном, или всем листом - не понял, как выбрать определенные столбцы Отсутствовал фильтр
Файл с примером прикрепил. Пример макроса (описал проблемы выше): [vba]
Код
Sub CollectDataFromAllSheets() Dim ws As Worksheet
Set wbCurrent = ActiveWorkbook Workbooks.Add Set wbReport = ActiveWorkbook
'копируем на итоговый лист шапку таблицы из первого листа wbCurrent.Worksheets(1).Range("A1:D1").Copy Destination:=wbReport.Worksheets(1).Range("A1")
'проходим в цикле по всем листам исходного файла For Each ws In wbCurrent.Worksheets
'определяем номер последней строки на текущем листе и на листе сборки n = wbReport.Worksheets(1).Range("A1").CurrentRegion.Rows.Count
'задаем исходный диапазон, который надо скопировать с каждого листа - любой вариант на выбор: Set rngData = ws.Range("A1:D5") 'фиксированный диапазон или Set rngData = ws.UsedRange 'всё, что есть на листе или Set rngData = ws.Range("F5").CurrentRegion 'область, начиная от ячейки F5 или Set rngData = ws.Range("A2", ws.Range("A2").SpecialCells(xlCellTypeLastCell)) 'от А2 и до конца листа
'копируем исходный диапазон и вставляем в итоговую книгу со следующей строки rngData.Copy Destination:=wbReport.Worksheets(1).Cells(n + 1, 1)