I have made the code work, except it runs pretty slowly, about 1.5 seconds per each EMP_REF_unq statement.
Any ideas on how to speed this up?
here is the code:
Sub Test_Wage_PIVOT_Alternitave()
'============================================
' CODE WORKS as of 12.08.2020
'============================================
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.AskToUpdateLinks = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
ThisWorkbook.Date1904 = False
ActiveWindow.View = xlNormalView
Sheets("Multiwage_NEW").UsedRange.ClearContents
Sheets("Temp_M").UsedRange.ClearContents
With Worksheets("Ref")
Dim LastRow_REF_EmpID As Long
LastRow_REF_EmpID = .Cells(.Rows.Count, "C").End(xlUp).Row
End With
For Each EMP_REF_unq In Sheets("Ref").Range("C2:C" & LastRow_REF_EmpID)
Sheets("Temp_M").UsedRange.ClearContents
Dim LastRow_Multiwage As Long, i As Long, j As Long
With Worksheets("Multiwage")
LastRow_Multiwage = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
With Worksheets("Temp_M")
j = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
End With
Sheets("Temp_M").Range("A1:X1").Value = Sheets("Multiwage").Range("A1:X1").Value
Sheets("Multiwage_NEW").Range("A1:X1").Value = Sheets("Multiwage").Range("A1:X1").Value
For i = 1 To LastRow_Multiwage
With Worksheets("Multiwage")
If .Cells(i, 1).Value = EMP_REF_unq Then
.Rows(i).Copy Destination:=Worksheets("Temp_M").Range("A" & j)
j = j + 1
End If
End With
Next i
Dim LastRow_TEMP_M As Long
With Worksheets("Temp_M")
LastRow_TEMP_M = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
Sheets("Temp_M").Range("A1").Sort Key1:=Sheets("Temp_M").Columns("K"), Header:=xlYes
For Each EMP_REF_For_WageLine In Sheets("Temp_M").Range("A2:A" & LastRow_TEMP_M)
With Sheets("Temp_M").Range("A2:A" & j)
Dim SEARCH_VALUE_WageType As String, SEARCH_VALUE_WageType_HOURS As String, SEARCH_VALUE_WageType_PayScaleGroup As String, START_ROW_TO_SEARCH_VALUE_WageType As String
SEARCH_VALUE_WageType = EMP_REF_For_WageLine.Offset(0, 23)
SEARCH_VALUE_WageType_HOURS = EMP_REF_For_WageLine.Offset(0, 15)
SEARCH_VALUE_WageType_PayScaleGroup = EMP_REF_For_WageLine.Offset(0, 13)
SEARCH_VALUE_WageType_address = EMP_REF_For_WageLine.Offset(0, 23).Address
SEARCH_VALUE_WageType_Row = Split(SEARCH_VALUE_WageType_address, "$")(2)
START_ROW_TO_SEARCH_VALUE_WageType = SEARCH_VALUE_WageType_Row + 1
Dim FindString As String
Dim Rng As Range
FindString = SEARCH_VALUE_WageType
If Trim(FindString) <> "" Then
With Sheets("Temp_M").Range("X" & START_ROW_TO_SEARCH_VALUE_WageType & ":X" & j + 1)
Set Rng = .Find(What:=FindString, _
After:=.Cells(.Cells.Count), _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
If Not Rng Is Nothing Then
'*****Code for when wagetype is found
EMP_REF_For_WageLine.Offset(0, 15) = SEARCH_VALUE_WageType_HOURS + Rng.Offset(0, -8)
Rng.Offset(0, 1) = "DELETE"
Rng = ""
Rng.Offset(0, -8) = ""
Else
End If
End With
End If
End With
Next EMP_REF_For_WageLine
Delete.Remove_Superseded
Delete.Remove_Zero
Dim copySheet As Worksheet
Dim pasteSheet As Worksheet
Dim LastRow_TEMP_M2 As Long
LastRow_TEMP_M2 = Sheets("Ref").Cells(Rows.Count, "C").End(xlUp).Row
Set copySheet = Worksheets("Temp_M")
Set pasteSheet = Worksheets("Multiwage_NEW")
copySheet.Range("A2:X" & j).Copy
pasteSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Application.CutCopyMode = False
Count = Count + 1
Application.StatusBar = Count & " out of " & LastRow_TEMP_M2 - 1 & " completed."
Next EMP_REF_unq
Application.StatusBar = False
Application.StatusBar = "Done!"
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
ThisWorkbook.Date1904 = False
Application.StatusBar = False
End Sub
Bookmarks