Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Копирование нужных данных с листов в один лист - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Копирование нужных данных с листов в один лист
SSre Дата: Вторник, 18.05.2021, 07:30 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 14
Репутация: 2 ±
Замечаний: 0% ±

Здравствуйте!
Необходимо скопировать данные с нескольких листов в один (макросом).
Особенности:
Все листы находятся на одной книге
Итоги выгружаются на Лист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]
К сообщению приложен файл: 111.xlsx (10.9 Kb)


Сообщение отредактировал SSre - Вторник, 18.05.2021, 21:17
 
Ответить
СообщениеЗдравствуйте!
Необходимо скопировать данные с нескольких листов в один (макросом).
Особенности:
Все листы находятся на одной книге
Итоги выгружаются на Лист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]

Автор - SSre
Дата добавления - 18.05.2021 в 07:30
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!