Как скопировать строки с других листов на целевой лист? - PullRequest
0 голосов
/ 08 января 2019

У меня есть ситуация, и я действительно восхищаюсь, если бы вы могли мне помочь, я просмотрел каждое решение вопросов, опубликованных на SOF, которые просто касались моей проблемы, но все же я не мог найти способ обойти это!

У меня есть мастер-лист с именами столбцов от a до z (например), также у меня есть множество других листов с разными именами, которые имеют тот же шаблон столбцов, теперь я хочу код, который копирует строки из других листов, которые начинаются с строка 2 на каждом листе, до следующей пустой строки на мастер-листе. Также дело в том, что каждый лист имеет переменное количество строк, которые не могут быть указаны. Я действительно восхищаюсь, если бы вы могли мне помочь !!!

Ответы [ 2 ]

0 голосов
/ 09 января 2019

For Each ваш друг - вы можете зациклить все Worksheets и все строки и просто указать строку на неосновном листе на последнюю строку мастер-листа.

Sub ConsolidateWorksheets(ByVal MasterSheet As Worksheet)
    MasterLastRow = MasterSheet.Range("A" & MasterSheet.Rows.Count).End(xlUp).Row + 1

    For Each DataSheet In ThisWorkbook.Sheets
        LastRow = DataSheet.Range("A" & DataSheet.Rows.Count).End(xlUp).Row
        If DataSheet.Name <> MasterSheet.Name Then
            For Each DataRow In DataSheet.Range("A2:A" & LastRow)
                MasterSheet.Range("A" & MasterLastRow & ":Z" & MasterLastRow).Value = DataSheet.Range("A" & DataRow.Row & ":Z" & DataRow.Row).Value
                MasterLastRow = MasterLastRow + 1
            Next DataRow
        End If
    Next DataSheet
End Sub

Sub Launcher()
    Set MasterSheet = ThisWorkbook.Sheets(1) ' Comment this row after testing
    ' Set MasterSheet = ThisWorkbook.Sheets("YourWorksheetNameHere") ' Uncomment this row after testing and update the name of your Master Sheet

    ConsolidateWorksheets MasterSheet

End Sub

Вы можете запустить этот код, запустив Sub Launcher()

0 голосов
/ 08 января 2019
sub test()
  dim MainSheetusedrows,OtherSheetusedrows as integer
  dim noOfSheets as integer

  noOfSheets = Thisworkbook.Sheets.Count

  for i = 1 to noOsfSheets
     sheets(i).activate
     OtherSheetusedrows = sheets(i).Range("A"& activesheet.rows.count).end(xlup).row
     sheets(i).Range("A2:Z"& OtherSheetusedrows).copy
     Sheets("MainSheet").activate
     MainSheetusedrows=Sheets("MainSheet")._
                      Range("A" & activesheet.rows.count).end(xlup).row
     Sheets("MainSheet").Range("A" & MainSheetusedrows + 1).select
     Activesheet.paste
  next
end sub

Этот код будет проходить по всем листам и из "OtherSheetusedrows", получать количество строк на каждом листе и копировать использованные данные на основной лист.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...