Добрый день, уважаемые форумчане! Помогите, пжл, доработать макрос сбора данных на сводный лист по условиям. В исходной книге (это выгрузка из базы поставщиков) от 2 до 100 листов формата "Город X-Фирма Y" (на них расчет сметы, по сути Цена-Кол-во-Стоимость) и лист "Common" со сводной таблицей, которую необходимо немного трансформировать. Из-за того, что на листе "Common" изначально много не нужных данных, то создаю новый лист, на который хочу собрать нужные мне данные. Подскажите, пжл, как корректно перенести данные по Бюджету, Дисконту и Сумме к оплате НДСных и безНДСных фирм? Т.е. необходимо на сводный лист корректно добавить значения из ячеек U66, Q67, Q68, Q73, U84. В этих ячейках на листах "Город X-Фирма Y" стоят формулы! Файлы с примерами "Исходник" и "Что нужно" прилагаю в архиве, т.к. весят каждый более 100 Kb. В файлах есть скрытые ячейки - они ни на что не влияют, это для сохранения структуры, какие данные в каких ячейках изначально находятся. Работаю с Excel 2003
Макрос (подробные комментарии сохранены) [vba]
Код
Sub AAR() Sheets.Add.Name = "Сводный" ‘добавляем новый лист, на который соберем данные With Sheets("Common") .Range("A41:F" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) ‘копируем с листа Common и вставляем на новый лист массив фирм с НДС With Sheets("Common") .Range("G42:L" & .Cells(Rows.Count, 7).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) ‘копируем с листа Common и вставляем на новый лист массив фирм без НДС, после фирм с НДС
End With End With Columns("A:F").EntireColumn.AutoFit Range("F:F").Cut Destination:=Range("K:K") ‘переносим столбец сумм, далее будем с ним сравнивать как с себестоимостью проекта Sheets("Common").Delete ‘удаляем прежний сводный лист For i = 2 To ThisWorkbook.Worksheets.Count – 1’задаем цикл по листам With Sheets(i) .Range("U66" ).Copy _ …………………………………………………………………………………………………………………………………. ‘ подскажите, как верно задать цикл по листам и ячейкам, чтобы перенос был корректным, НДСные значения к НДСным фирмам, безНДСные к безНДСным End With Next i End Sub
[/vba]
Заранее благодарен за отклики.
Добрый день, уважаемые форумчане! Помогите, пжл, доработать макрос сбора данных на сводный лист по условиям. В исходной книге (это выгрузка из базы поставщиков) от 2 до 100 листов формата "Город X-Фирма Y" (на них расчет сметы, по сути Цена-Кол-во-Стоимость) и лист "Common" со сводной таблицей, которую необходимо немного трансформировать. Из-за того, что на листе "Common" изначально много не нужных данных, то создаю новый лист, на который хочу собрать нужные мне данные. Подскажите, пжл, как корректно перенести данные по Бюджету, Дисконту и Сумме к оплате НДСных и безНДСных фирм? Т.е. необходимо на сводный лист корректно добавить значения из ячеек U66, Q67, Q68, Q73, U84. В этих ячейках на листах "Город X-Фирма Y" стоят формулы! Файлы с примерами "Исходник" и "Что нужно" прилагаю в архиве, т.к. весят каждый более 100 Kb. В файлах есть скрытые ячейки - они ни на что не влияют, это для сохранения структуры, какие данные в каких ячейках изначально находятся. Работаю с Excel 2003
Макрос (подробные комментарии сохранены) [vba]
Код
Sub AAR() Sheets.Add.Name = "Сводный" ‘добавляем новый лист, на который соберем данные With Sheets("Common") .Range("A41:F" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) ‘копируем с листа Common и вставляем на новый лист массив фирм с НДС With Sheets("Common") .Range("G42:L" & .Cells(Rows.Count, 7).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) ‘копируем с листа Common и вставляем на новый лист массив фирм без НДС, после фирм с НДС
End With End With Columns("A:F").EntireColumn.AutoFit Range("F:F").Cut Destination:=Range("K:K") ‘переносим столбец сумм, далее будем с ним сравнивать как с себестоимостью проекта Sheets("Common").Delete ‘удаляем прежний сводный лист For i = 2 To ThisWorkbook.Worksheets.Count – 1’задаем цикл по листам With Sheets(i) .Range("U66" ).Copy _ …………………………………………………………………………………………………………………………………. ‘ подскажите, как верно задать цикл по листам и ячейкам, чтобы перенос был корректным, НДСные значения к НДСным фирмам, безНДСные к безНДСным End With Next i End Sub
Sub AAR() Dim sh As Worksheet, i& Application.DisplayAlerts = 0 Set sh = Sheets.Add sh.Name = "Сводный" ''добавляем новый лист, на который соберем данные With Sheets("Common") .Range("A41:F" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) ''копируем с листа Common и вставляем на новый лист массив фирм с НДС .Range("G42:L" & .Cells(Rows.Count, 7).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) 'копируем с листа Common и вставляем на новый лист массив фирм без НДС, после фирм с НДС End With Columns("A:F").EntireColumn.AutoFit [F:F].Cut [K:K] 'переносим столбец сумм, далее будем с ним сравнивать как с себестоимостью проекта Sheets("Common").Delete 'удаляем прежний сводный лист For i = 3 To sh.[b65536].End(xlUp).Row '’задаем цикл по листам With Sheets(sh.Cells(i, 2).Value) sh.Cells(i, 6).Resize(, 5) = Array(.[U66].Value, .[Q67].Value, .[Q68].Value, .[Q73].Value, .[U84].Value) End With Next i Application.DisplayAlerts = -1 End Sub
[/vba]Заголовки полей проставите сами.
Che79, можно так: [vba]
Код
Sub AAR() Dim sh As Worksheet, i& Application.DisplayAlerts = 0 Set sh = Sheets.Add sh.Name = "Сводный" ''добавляем новый лист, на который соберем данные With Sheets("Common") .Range("A41:F" & .Cells(Rows.Count, 1).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) ''копируем с листа Common и вставляем на новый лист массив фирм с НДС .Range("G42:L" & .Cells(Rows.Count, 7).End(xlUp).Row).Copy _ Sheets("Сводный").Cells(Rows.Count, 1).End(xlUp)(2, 1) 'копируем с листа Common и вставляем на новый лист массив фирм без НДС, после фирм с НДС End With Columns("A:F").EntireColumn.AutoFit [F:F].Cut [K:K] 'переносим столбец сумм, далее будем с ним сравнивать как с себестоимостью проекта Sheets("Common").Delete 'удаляем прежний сводный лист For i = 3 To sh.[b65536].End(xlUp).Row '’задаем цикл по листам With Sheets(sh.Cells(i, 2).Value) sh.Cells(i, 6).Resize(, 5) = Array(.[U66].Value, .[Q67].Value, .[Q68].Value, .[Q73].Value, .[U84].Value) End With Next i Application.DisplayAlerts = -1 End Sub
Мне потребовалось написать тривиальный макрос, но с ними я совсем не дружу, поэтому надеюсь на Вашу помощь. Нужно скопировать данные с разных листов на итоговый лист одной и той же книги Excel. Количество столбцов всегда одинаковое, а вот количество строк и листов - разное. При этом желательно, чтобы первую страницу он копировал с заголовком, а остальные - без. Файл прилагаю.
Помогите, пож-та
[admin]Тема закрыта. Причина: нарушение п.п. 4, 5q Правил форума[/admin]
Добрый день!
Мне потребовалось написать тривиальный макрос, но с ними я совсем не дружу, поэтому надеюсь на Вашу помощь. Нужно скопировать данные с разных листов на итоговый лист одной и той же книги Excel. Количество столбцов всегда одинаковое, а вот количество строк и листов - разное. При этом желательно, чтобы первую страницу он копировал с заголовком, а остальные - без. Файл прилагаю.
Помогите, пож-та
[admin]Тема закрыта. Причина: нарушение п.п. 4, 5q Правил форума[/admin]Nat