Копировать данные столбца с нескольких листов на один лист в одном и том же столбце, без перезаписи - PullRequest
0 голосов
/ 18 марта 2019

У меня есть три извлечения данных:

  • Счета
  • CreditNotes
  • Журналы

Я создал книгу Excel, которая имеетэти данные в трех отдельных вкладках.Каждая вкладка содержит более 50 столбцов.

Я хочу создать «главную» вкладку, которая копирует всего три столбца данных из каждой из этих трех вкладок в одну консолидированную таблицу, то есть со столбцами:

  • Код счета
  • Количество единиц
  • Дата

Я знаю, как копировать целые столбцы с одного листа на другой, используя VBA, я простоне знаю, как скопировать данные из другого столбца в следующую пустую ячейку на «основной вкладке», т.е. не перезаписывать данные, например:

Я могу скопировать данные кода учетной записи на вкладке «Счета»на вкладку «мастер», но затем, когда я иду, чтобы скопировать данные кода учетной записи с вкладки «CreditNotes», он перезаписывает то, что я уже скопировал с вкладки «Счета-фактуры», тогда как я хочу, чтобы это было скопировано внизу.

Извините за стену текста, я просто пытаюсь предоставить как можно больше информации!

У меня есть код:

Sub Consolidation()

Sheets("Invoices").Columns(11).Copy Destination:=Sheets("master").Columns(1)
Sheets("CreditNotes").Columns(11).Copy Destination:=Sheets("master").Columns(1)
Sheets("Journals").Columns(11).Copy Destination:=Sheets("master").Columns(1)

End Sub

1 Ответ

0 голосов
/ 18 марта 2019

Колонка консолидации

Sub ConsolidateColumn()

    ' Source Worksheet List
    Const cSheets As String = "Invoices,CreditNotes,Journals"
    Const cTarget As String = "Sheet1"  ' Target Worksheet Name
    Const cFur As Long = 2              ' Source First Used Row
    Const cColS As Variant = 11         ' Source Column Letter/Number ("K")
    Const cColT As Variant = 1          ' Target Column Letter/Number ("A")

    Dim rng As Range      ' Source Column Range (in current Source Worksheet)
    Dim vntW As Variant   ' Worksheet Array
    Dim LurS As Long      ' Source Last Used Row Number
    Dim FerT As Long      ' Target First Empty Row Number
    Dim i As Long         ' Worksheet Array Element Counter

    ' Split Source Worksheet List to Worksheet Array.
    vntW = Split(cSheets, ",")

    ' In This Workbook (The Workbook Containing This Code)
    With ThisWorkbook.Worksheets(cTarget)
        ' Loop through elements of Worksheet Array.
        For i = 0 To UBound(vntW)
            ' Calculate Target First Empty Row Number.
            FerT = .Cells(.Rows.Count, cColT).End(xlUp).Row + 1
            ' In Current Source Worksheet
            With ThisWorkbook.Worksheets(Trim(vntW(i)))
                ' Calculate Source Last Used Row Number.
                LurS = .Cells(.Rows.Count, cColS).End(xlUp).Row
                ' Calculate Source Column Range.
                ' Create a reference to Source Column Range.
                Set rng = .Cells(cFur, cColS).Resize(LurS - cFur + 1)
            End With
            ' Calculate Target Column Range.
            ' Copy values from current Source Column Range to Target Column
            ' Range.
            .Cells(FerT, cColT).Resize(rng.Rows.Count) = rng.Value
        Next
    End With
 End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...