My Excel do c извлекает информацию из внешних файлов и сохраняет ее на 5 отдельных листах / в таблицах. Каждая таблица имеет одинаковые столбцы и порядок, но количество строк меняется ежедневно.
То, что я пытался сделать, это объединить все данные в одну таблицу. Есть ли более эффективный способ сделать это, чем мой код копирования / вставки ниже?
Это код только для 2 таблиц. Всего я хочу объединить 5 таблиц.
Sub merge()
Dim wb As Workbook: Set wb = Workbooks("MASTER.xlsm")
Dim masterWS As Worksheet: Set masterWS = wb.Worksheets("MASTER")
Dim WS1 As Worksheet: Set WS1 = wb.Worksheets("1")
Dim WS2 As Worksheet: Set WS2 = wb.Worksheets("2")
Dim WS3 As Worksheet: Set WS3 = wb.Worksheets("3")
Dim WS4 As Worksheet: Set WS4 = wb.Worksheets("4")
Dim WS5 As Worksheet: Set WS5 = wb.Worksheets("5")
Dim counter1 As Long
Dim counter2 As Long
Dim counter3 As Long
Dim counter4 As Long
Dim counter5 As Long
Dim counter As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
' Count rows for each account
WS1.Activate
counter1 = WS1.Range("A11", Range("A11").End(xlDown)).Rows.Count
WS2.Activate
counter2 = WS2.Range("A11", Range("A11").End(xlDown)).Rows.Count
WS3.Activate
counter3 = WS3.Range("A11", Range("A11").End(xlDown)).Rows.Count
WS4.Activate
counter4 = WS4.Range("A11", Range("A11").End(xlDown)).Rows.Count
WS5.Activate
counter5 = WS5.Range("A11", Range("A11").End(xlDown)).Rows.Count
' Sum of counter
counter = counter1 + counter2 + counter3 + counter4 + counter5
While counter > 0
If counter1 > 0 Then
counter = counter - counter1
WS1.Range("E11:E" & counter1 + 10).Copy
masterWS.Range("B:B" & counter).PasteSpecial xlPasteAll
WS1.Range("I11:I" & counter1 + 10).Copy
masterWS.Range("C:C" & counter).PasteSpecial xlPasteAll
WS1.Range("J11:J" & counter1 + 10).Copy
masterWS.Range("D:D" & counter).PasteSpecial xlPasteAll
WS1.Range("K11:K" & counter1 + 10).Copy
masterWS.Range("E:E" & counter).PasteSpecial xlPasteAll
WS1.Range("S11:S" & counter1 + 10).Copy 'BROKER
masterWS.Range("F:F" & counter).PasteSpecial xlPasteAll
WS1.Range("B11:B" & counter1 + 10).Copy 'TD
masterWS.Range("G:G" & counter).PasteSpecial xlPasteAll
WS1.Range("C11:C" & counter1 + 10).Copy 'SD
masterWS.Range("H:H" & counter).PasteSpecial xlPasteAll
masterWS.Range("I:I" & counter).Value = "TEST"
End If
If counter2 > 0 Then
counter = counter - counter2
WS2.Range("E11:E" & counter2 + 10).Copy
masterWS.Range("B:B" & counter).PasteSpecial xlPasteAll
WS2.Range("I11:I" & counter2 + 10).Copy
masterWS.Range("C:C" & counter).PasteSpecial xlPasteAll
WS2.Range("J11:J" & counter2 + 10).Copy 'AMOUNT
masterWS.Range("D:D" & counter).PasteSpecial xlPasteAll
WS2.Range("K11:K" & counter2 + 10).Copy 'PRICE
masterWS.Range("E:E" & counter).PasteSpecial xlPasteAll
WS2.Range("S11:S" & counter2 + 10).Copy 'BROKER
masterWS.Range("F:F" & counter).PasteSpecial xlPasteAll
WS2.Range("B11:B" & counter2 + 10).Copy 'TD
masterWS.Range("G:G" & counter).PasteSpecial xlPasteAll
WS2.Range("C11:C" & counter2 + 10).Copy 'SD
masterWS.Range("H:H" & counter).PasteSpecial xlPasteAll
masterWS.Range("I:I" & counter).Value = "test2"
End If
Wend
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub