Объединить листы с заготовками в один лист - VBA - PullRequest
1 голос
/ 09 июля 2019

Я знаю, что этот вопрос задавался несколько раз, но, похоже, решение для меня не сработало.У меня есть большая рабочая тетрадь с данными о 50 компаниях, распределенная по 50 таблицам.

Моя цель - объединить все в большой «комбинированный» лист, включая все данные.Однако данные на рабочих листах иногда имеют пробелы.Также мой код не имеет общего заголовка.Вместо этого в первом ряду всегда указывается название компании, которое также следует перенести на комбинированный лист.

Смотрите мой скриншот ниже:

enter image description here

Я пробовал приведенный ниже код, но он только объединял заголовки.

Sub Combine()
 Dim J As Integer
  On Error Resume Next
  Sheets(1).Select
  Worksheets.Add
  Sheets(1).Name = "Combined"
  Sheets(2).Activate
  Range("A1").EntireRow.Select
  Selection.Copy Destination:=Sheets(1).Range("A1")
 For J = 2 To Sheets.Count
  Sheets(J).Activate
  Range("A1").Select
  Selection.CurrentRegion.Select
  Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
  Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)
 Next
End Sub

Выполнение кода дает мне только строку заголовка, но не остальные данные.

См. Результат:

enter image description here

Любые предложения будут высоко оценены, спасибо!

1 Ответ

0 голосов
/ 09 июля 2019
Sub Combine()
Dim ws as Worksheet, Combined as Worksheet
Dim LastRow as Long, iRow as Long
Set Combined = ThisWorkbook.Worksheets.Add
Combined.Name = "Combined"
iRow = 1

For Each ws In ThisWorkbook.Worksheets
    If ws.Name <> "Combined" Then
        With ws
            If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
                LastRow = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Row
                .Range("A1:J" & LastRow).Copy _
                    Destination:= Combined.Range("A" & iRow)
                iRow = iRow + LastRow
            End If
        End With
    End If
Next ws

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