Здравствуйте! Сразу прошу прощения за может быть похожую тему в других топиках. Суть проблемы: Как объединить данные из ячеек (столбец А) из нескольких листов одной книги в один столбец на новом листе? Число строк в разных листах разное. Число листов в книге тоже может меняться. Желательно вариант с формулами. Если это неприменимо в принципе, тогда подойдет и макрос.
Здравствуйте! Сразу прошу прощения за может быть похожую тему в других топиках. Суть проблемы: Как объединить данные из ячеек (столбец А) из нескольких листов одной книги в один столбец на новом листе? Число строк в разных листах разное. Число листов в книге тоже может меняться. Желательно вариант с формулами. Если это неприменимо в принципе, тогда подойдет и макрос.
Public Sub www() Dim sh As Worksheet For Each sh In Worksheets If Not sh Is Me Then _ sh.Range(sh.[a1], sh.Cells(Rows.Count, 1).End(xlUp)).Copy _ Me.Cells(Rows.Count, 1).End(xlUp)(2) Next End Sub
[/vba]
В модуль общего листа: [vba]
Код
Public Sub www() Dim sh As Worksheet For Each sh In Worksheets If Not sh Is Me Then _ sh.Range(sh.[a1], sh.Cells(Rows.Count, 1).End(xlUp)).Copy _ Me.Cells(Rows.Count, 1).End(xlUp)(2) Next End Sub
Sub Macros() Dim Arr, MyArr() As String Dim i As Long, j As Long, n As Long For i = 3 To Sheets.Count iRow = Sheets(i).Range("A1").End(xlDown).Row Arr = Sheets(i).Range("A1:A" & iRow) For j = 1 To UBound(Arr) ReDim Preserve MyArr(1 To 1, 0 To n) MyArr(1, n) = Arr(j, 1): n = n + 1 Next j Next Sheets(1).Range("A1").Resize(n, 1) = Application.Transpose(MyArr) End Sub
[/vba]
[vba]
Код
Sub Macros() Dim Arr, MyArr() As String Dim i As Long, j As Long, n As Long For i = 3 To Sheets.Count iRow = Sheets(i).Range("A1").End(xlDown).Row Arr = Sheets(i).Range("A1:A" & iRow) For j = 1 To UBound(Arr) ReDim Preserve MyArr(1 To 1, 0 To n) MyArr(1, n) = Arr(j, 1): n = n + 1 Next j Next Sheets(1).Range("A1").Resize(n, 1) = Application.Transpose(MyArr) End Sub
Да, с любым. В первый лист данные собираются. В коде i=3, то значит что собирать данные начинаем с третьего листа. Если второй лист с примером убрать, то измените i=2 Макрос переносите в модуль проекта VBA? Кнопку делаете или копируете и назначаете ей макрос или запускаете макрос Alt+F8 выбираете макрос, нажать выполнить.
Цитата (An9el)
макрос будет работать с любым количеством листов
Да, с любым. В первый лист данные собираются. В коде i=3, то значит что собирать данные начинаем с третьего листа. Если второй лист с примером убрать, то измените i=2 Макрос переносите в модуль проекта VBA? Кнопку делаете или копируете и назначаете ей макрос или запускаете макрос Alt+F8 выбираете макрос, нажать выполнить.AlexM
Номер мобильного модема (без голосовой связи) 9269171249 МегаФон, Московский регион.
Сообщение отредактировал AlexM - Вторник, 26.03.2013, 00:04
Да, с любым. В первый лист данные собираются. В коде i=3, то значит что собирать данные начинаем с третьего листа. Если второй лист с примером убрать, то измените i=2 Макрос переносите в модуль проекта VBA? Кнопку делаете или копируете и назначаете ей макрос или запускаете макрос Alt+F8 выбираете макрос, нажать выполнить.
Простите за беспокойство. Обнаружилась ошибка. При вставке пустого листа или не заполнены хотя бы 2 строчки, макрос выдает ошибку Runitime error '13': Type maismatch и в макросе подсвечивает строчку Sheets(1).Range("A1").Resize(n, 1) = Application.Transpose(MyArr)
С пустим листом как бы понятно (это пока не критично), а вот если в столбце на листе нет данных хотя бы в 2 строчках это не совсем гут. так как может быть заполнена только одна ячейка в столбце или совсем пустой. Если с пустым листом сложно, то помогите решить хотя бы с листами в которых только одна строчка.
AlexM, здравствуйте
Цитата (AlexM)
Да, с любым. В первый лист данные собираются. В коде i=3, то значит что собирать данные начинаем с третьего листа. Если второй лист с примером убрать, то измените i=2 Макрос переносите в модуль проекта VBA? Кнопку делаете или копируете и назначаете ей макрос или запускаете макрос Alt+F8 выбираете макрос, нажать выполнить.
Простите за беспокойство. Обнаружилась ошибка. При вставке пустого листа или не заполнены хотя бы 2 строчки, макрос выдает ошибку Runitime error '13': Type maismatch и в макросе подсвечивает строчку Sheets(1).Range("A1").Resize(n, 1) = Application.Transpose(MyArr)
С пустим листом как бы понятно (это пока не критично), а вот если в столбце на листе нет данных хотя бы в 2 строчках это не совсем гут. так как может быть заполнена только одна ячейка в столбце или совсем пустой. Если с пустым листом сложно, то помогите решить хотя бы с листами в которых только одна строчка.An9el
Кто мешает тупо добавить строку очистки диапазона? Кстати, макрос Алекса тоже диапазон не чистит, поэтому, если к-во данных уменьшится по каким-то причинам, то останутся хвосты от прошлой работы. Но Вы ведь не научиться чему-то сюда пришли, а тупо получить готовое решение, пальцем не шевельнув. Для этого есть раздел Работа. [Удалено администрацией]
Цитата (An9el)
тупо добавляет
Кто мешает тупо добавить строку очистки диапазона? Кстати, макрос Алекса тоже диапазон не чистит, поэтому, если к-во данных уменьшится по каким-то причинам, то останутся хвосты от прошлой работы. Но Вы ведь не научиться чему-то сюда пришли, а тупо получить готовое решение, пальцем не шевельнув. Для этого есть раздел Работа. [Удалено администрацией]KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
AlexM, Вопрос по Вашему коду, как сказал An9el, есть ошибка. Если между листами с данными попадает лист без данных или с не заполненными хотя бы 2 строчками, макрос не собирает информацию с последующих листов с данными. Как с этим бороться?
AlexM, Вопрос по Вашему коду, как сказал An9el, есть ошибка. Если между листами с данными попадает лист без данных или с не заполненными хотя бы 2 строчками, макрос не собирает информацию с последующих листов с данными. Как с этим бороться? ALV