Hi,
I'm new to VBA and currently working with the loop. However, my VBA code seems very slow...
The purpose of my VBA is to loop the Source Workbook by merging all the outcomes.
I would be appreciated with your help..!
Here is my code,
Sub Merge()
Application.ScreenUpdating = False
Dim lastRow As Integer
Dim SourceWB As Workbook: Set SourceWB = Workbooks.Open("")
Dim TargetWB As Workbook: Set TargetWB = Workbooks.Open("")
Dim lRowCount As Integer, i As Integer
Dim WS1 As Worksheet, WS2 As Worksheet, WS3 As Worksheet
With ThisWorkbook
Set WS1 = .Sheets("OUTPUT_1")
Set WS2 = .Sheets("OUTPUT_2")
Set WS3 = .Sheets("PROCESS")
End With
TargetWB.Sheets("PROCESS").Range("A4:Q100000").Clear
SourceWB.Activate
Application.ActiveSheet.UsedRange
lRowCount = Worksheets("SOURCE").UsedRange.Rows.Count
Application.Calculation = xlAutomatic
TargetWB.Sheets("INFO").Activate
For i = 1 To lRowCount
Cells(2, 5) = i
Worksheets("INFO").Range("C4").Copy
Worksheets("PROCESS").Range("A" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("INFO").Range("C8").Copy
Worksheets("PROCESS").Range("B" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("BETA").Range("AC1:AJ1").Copy
Worksheets("PROCESS").Range("K" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("BETA").Range("AQ1:AR1").Copy
Worksheets("PROCESS").Range("S" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("INFO").Range("C5").Copy
Worksheets("PROCESS").Range("C" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("INFO").Range("C6").Copy
Worksheets("PROCESS").Range("E" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("INFO").Range("C11").Copy
Worksheets("PROCESS").Range("F" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("BETA").Range("CC1").Copy
Worksheets("PROCESS").Range("H" & i + 3).PasteSpecial Paste:=xlPasteValues
Worksheets("INFO").Range("C17").Copy
Worksheets("PROCESS").Range("I" & i + 3).PasteSpecial Paste:=xlPasteValues
Next i
With WS3
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
.Range("C4:C" & lastRow).Formula = _
"=VLOOKUP($D4,Mapping!$A:$B,2,FALSE)"
.Range("C4:C" & lastRow).Value = .Range("C4:C" & lastRow).Value
.Range("I4:I" & lastRow).Formula = _
"=CONCAT(B4," & Chr(34) & "|" & Chr(34) & ",C4," & Chr(34) & "|" & Chr(34) & ",E4," & Chr(34) & "|" & Chr(34) & ",F4," & Chr(34) & "|" & Chr(34) & ",G4)"
.Range("I4:I" & lastRow).Value = .Range("I4:I" & lastRow).Value
.Range("F4:F" & lastRow).Formula = _
"=YEAR($E4)"
.Range("F4:F" & lastRow).Value = .Range("F4:F" & lastRow).Value
End With
With WS3
.AutoFilterMode = False
LRow = .Range("A" & .Rows.Count).End(xlUp).Row
LCol = .Range("A2").End(xlToRight).Column
Set RngBeforeFilter = .Range(.Cells(2, 1), .Cells(LRow, LCol))
RngBeforeFilter.Rows(1).AutoFilter Field:=9, Criteria1:="AAA"
WS3.Range("J4:T" & LRow).Copy Destination:=WS2.Range("A4")
End With
With WS3
.AutoFilterMode = False
LRow = .Range("A" & .Rows.Count).End(xlUp).Row
LCol = .Range("A2").End(xlToRight).Column
Set RngBeforeFilter = .Range(.Cells(2, 1), .Cells(LRow, LCol))
RngBeforeFilter.Rows(1).AutoFilter Field:=9, Criteria1:="<>AAA"
WS3.Range("J4:T" & LRow).Copy Destination:=WS1.Range("A4")
End With
WS3.AutoFilterMode = False
Application.ScreenUpdating = True
Application.Calculation = xlManual
SourceWB.Close
End Sub
Bookmarks