Добрый день! Помогите, пожалуйста, написать макрос, позволяющий копировать данные с определенных колонок нескольких листов на один лист этого же файла таким образом, чтобы данные располагались последовательно. т.е. на общем листе данные с каждого листа должны располагаться под данными предыдущего листа, а также в дополнительной колонке выводилась бы информация, с какого листа скопированы данные. Пример во вложении. Есть данные по 3-м проектам. Необходимо скопировать информацию по товару, количеству и цене на один лист и указать в отдельной колонке проект (в файле - лист Total). Номера колонок, в которых содержится информация по товару, количеству и цене, могут различаться по каждому проекту.
Спасибо большое! Только, к сожалению, по Проекту3 на листе Total информация отобразилась не совсем верно в связи с тем, что порядок колонок на данном листе другой, в результате на общий лист в поле Количество попали данные по артикулам, а в поле Цена - данные по количеству. Возможно ли предусмотреть в коде, чтобы с листов 1 и 2 копировались данные из 1,2 и 3 колонок, а с листа 3 - с 1,3 и 4 колонок?
Если нет абсолютно никакой возможности переставить на итоговом листе местами столбцы, то я могу переделать макрос. Переделывать? Минутку! А почему артикул есть не на всех листах? И где в Вашем файле на итоговом листе столбец с артикулами?
Данные по артикулам я привела для примера, они необязательно должны быть на каждом листе и на общий лист их выводить не нужно) Дело в том, что в реальности пример сложнее: в данный файл с помощью Power Query попадают данные с 3-х источников, в которых расположение колонок различается, а также в каждом источнике помимо данных колонок содержатся и другие, которые для сверки не требуются, но желательно, чтобы в рабочий файл они также попали, чтобы потом легче было анализировать расхождения. Необходимо сверить три источника только по 3-м параметрам. Я поменяла расположение колонок с помощью Power Query: макрос работает)) поэтому нет необходимости переделывать. Спасибо большое!
Извиняюсь - обновление не срабатывало и не видел Вашего сообщенияю Но, если наименования столбцов иду в произвольном порядке, то можно передалать макрос, чтобы он искал сам нужные позиции. Главное, чтобы заголовки совпадали.
Если не сложно, можете подсказать, как можно изменить макрос, чтобы он сам искал определенные позиции? Часто приходится сверять такие файлы, где колонки расположены в произвольном порядке, и не всегда удобно вручную менять их расположение. Во всех файлах заголовки колонок совпадают.
Alyona, Разрешите поинтересоваться? А зечем вам макрос, если уже источники тянутся через PQ? Может проще сразу же и итоговую таблицу формировать в нем же?
Sub Macro1()
Dim LastRow As Long, n As Long, i As Long, FreeRow As Long, RowStart As Long, cell As Range
LastRow = cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
Range(cells(2, 1), cells(LastRow + 1, 4)).ClearContents
FreeRow = 2
RowStart = 2
For n = 1 To Sheets.Count - 1
With Sheets(n)
LastRow = .cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To 3
Set cell = .Rows(1).Find(cells(1, i))
Range(.cells(2, cell.Column), .cells(LastRow, cell.Column)).Copy cells(FreeRow, i)
Next i
FreeRow = cells(Rows.Count, 1).End(xlUp).Row + 1
Range(cells(RowStart, 4), cells(FreeRow - 1, 4)).Value = Sheets(n).Name
RowStart = FreeRow
End With
Next
Application.ScreenUpdating = True
End Sub
Изменено: Mershik - 29.09.2020 15:04:38(исправил ошибку в макросе)
Alyona, если учесть что таблицы у вас выгружаются с помощью PQ, то данные выводятся в умные таблицы. Показываю как пример сбора данных с таблиц при помощи Power Query. При этом нужно учесть, что не обязательно выводить таблицы с данными на лист, объединять можно сразу запросы, и получать одну итоговую простыню. Не обязательно делать отдельные запросы к каждому файлу, можно положить их в папку и обрабатывать пакетно.
Спасибо! Очень интересный вариант! К сожалению, пакетная загрузка мне не подходит именно в данном случае, т.к. все файлы-источники имеют разную структуру, и каждый файл приходится преобразовывать индивидуально, т.е. нельзя выбрать файл-пример(