Доброго всем времени суток. От меня был уже подобный вопрос, но сейчас задача стоит в следующем. Есть какое-то кол-во листов в книге, например 4. Предположим, что все листы по конструкции идентичны, но сами таблицы могут быть различного объема . И Нужно собрать данные не со всех листов, а с определенных, поместить данные друг под другом. Нужно это сделать именно макросом, лучше по нажатию кнопки. Во вложении пример таблицы и что в итоге должно получиться. Собрать таблицы нужно с листов 2 и 3, а 1 и 4 не трогать. Помогите решить данную задачу пжлст) Спасибо.
Доброго всем времени суток. От меня был уже подобный вопрос, но сейчас задача стоит в следующем. Есть какое-то кол-во листов в книге, например 4. Предположим, что все листы по конструкции идентичны, но сами таблицы могут быть различного объема . И Нужно собрать данные не со всех листов, а с определенных, поместить данные друг под другом. Нужно это сделать именно макросом, лучше по нажатию кнопки. Во вложении пример таблицы и что в итоге должно получиться. Собрать таблицы нужно с листов 2 и 3, а 1 и 4 не трогать. Помогите решить данную задачу пжлст) Спасибо.RLGrime
Sub sbor() With Sheets(2): arr1 = .Range(.Cells(1), .Cells.SpecialCells(xlCellTypeLastCell)): End With With Sheets(3): arr2 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With Sheets(5).Cells(1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1 Sheets(5).Cells(UBound(arr1) + 1, 1).Resize(UBound(arr2), UBound(arr2, 2)).Value = arr2 End Sub
[/vba]
Добрый день. [vba]
Код
Sub sbor() With Sheets(2): arr1 = .Range(.Cells(1), .Cells.SpecialCells(xlCellTypeLastCell)): End With With Sheets(3): arr2 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With Sheets(5).Cells(1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1 Sheets(5).Cells(UBound(arr1) + 1, 1).Resize(UBound(arr2), UBound(arr2, 2)).Value = arr2 End Sub
sboy, А еще вопрос, если добавить к сборке еще и 4й лист, как это реализовать? Я в этом просто 2по5, сам не могу решить. Попробовал, получается добавляет только 2 позиции. Если не сложно подскажите и я уже отстану) Спасибо.
sboy, А еще вопрос, если добавить к сборке еще и 4й лист, как это реализовать? Я в этом просто 2по5, сам не могу решить. Попробовал, получается добавляет только 2 позиции. Если не сложно подскажите и я уже отстану) Спасибо.RLGrime
Добавить еще массив Если листов много, то имеет смысл переделать на цикл по листам [vba]
Код
Sub sbor() With Sheets(2): arr1 = .Range(.Cells(1), .Cells.SpecialCells(xlCellTypeLastCell)): End With With Sheets(3): arr2 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With With Sheets(4): arr3 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With Sheets(5).Cells(1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1 Sheets(5).Cells(UBound(arr1) + 1, 1).Resize(UBound(arr2), UBound(arr2, 2)).Value = arr2 Sheets(5).Cells(UBound(arr1) + UBound(arr2) + 1, 1).Resize(UBound(arr3), UBound(arr3, 2)).Value = arr3 End Sub
[/vba]
Добавить еще массив Если листов много, то имеет смысл переделать на цикл по листам [vba]
Код
Sub sbor() With Sheets(2): arr1 = .Range(.Cells(1), .Cells.SpecialCells(xlCellTypeLastCell)): End With With Sheets(3): arr2 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With With Sheets(4): arr3 = .Range(.Cells(2, 1), .Cells.SpecialCells(xlCellTypeLastCell)): End With Sheets(5).Cells(1).Resize(UBound(arr1), UBound(arr1, 2)).Value = arr1 Sheets(5).Cells(UBound(arr1) + 1, 1).Resize(UBound(arr2), UBound(arr2, 2)).Value = arr2 Sheets(5).Cells(UBound(arr1) + UBound(arr2) + 1, 1).Resize(UBound(arr3), UBound(arr3, 2)).Value = arr3 End Sub
Private Sub CommandButton1_Click() Me.Hide On Error Resume Next With Application: .EnableEvents = 0: .ScreenUpdating = 0 With ActiveSheet.UsedRange Intersect(.Cells, .Offset(1)).Delete xlUp End With With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then With ThisWorkbook.Sheets(.List(i)).UsedRange Intersect(.Cells, .Offset(1)).Copy _ [A1].Offset(Cells(Rows.Count, 1).End(xlUp).Row) End With End If Next End With .EnableEvents = 1: .ScreenUpdating = 1: End With Unload Me End Sub Private Sub UserForm_Initialize() Dim SH As Worksheet For Each SH In ThisWorkbook.Sheets If Not SH Is ActiveSheet Then Me.ListBox1.AddItem SH.Name Next End Sub
[/vba]
Можно использовать форму для выбора листов [vba]
Код
Private Sub CommandButton1_Click() Me.Hide On Error Resume Next With Application: .EnableEvents = 0: .ScreenUpdating = 0 With ActiveSheet.UsedRange Intersect(.Cells, .Offset(1)).Delete xlUp End With With ListBox1 For i = 0 To .ListCount - 1 If .Selected(i) Then With ThisWorkbook.Sheets(.List(i)).UsedRange Intersect(.Cells, .Offset(1)).Copy _ [A1].Offset(Cells(Rows.Count, 1).End(xlUp).Row) End With End If Next End With .EnableEvents = 1: .ScreenUpdating = 1: End With Unload Me End Sub Private Sub UserForm_Initialize() Dim SH As Worksheet For Each SH In ThisWorkbook.Sheets If Not SH Is ActiveSheet Then Me.ListBox1.AddItem SH.Name Next End Sub
krosav4ig, здравствуйте! Помогите, пжлст, можно ли выбирать определенный интервал копируемых ячеек? Мне нужно копировать данные колонок A:G, начиная со второй строки каждого, выбранного листа и вставлять их на определенный лист также со второй строки, чтобы не затрагивать заголовки! Спасибо!
krosav4ig, здравствуйте! Помогите, пжлст, можно ли выбирать определенный интервал копируемых ячеек? Мне нужно копировать данные колонок A:G, начиная со второй строки каждого, выбранного листа и вставлять их на определенный лист также со второй строки, чтобы не затрагивать заголовки! Спасибо!hripunkov