Hi,

Is there a more efficient way to optimize the code below to improve its performance because on a large data set with over 20,00o records it is very slow?
Thanks in advance for any assistance that you can provide.


Sub Update_New_Data_Completes()
    Dim Firstrow As Long
    Dim LastRow As Long
    Dim Lrow As Long
    Dim CalcMode As Long
    Dim ViewMode As Long

    With Application
        CalcMode = .Calculation
        .Calculation = xlCalculationManual
        .ScreenUpdating = False
    End With
   
    With ActiveSheet
        .Select
        ViewMode = ActiveWindow.View
        ActiveWindow.View = xlNormalView
        .DisplayPageBreaks = False
        
        Firstrow = 2
        LastRow = .Cells(.Rows.count, "A").End(xlUp).Row
        
        For Lrow = LastRow To Firstrow Step -1
        
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 9).Value <> "" And .Offset(0, 10).Value = "" Then
                                .Offset(0, 10).Value = "N/A"
                                .Offset(0, 11).Value = "N/A"
                                .Offset(0, 12).Value = "N/A"
                                .Offset(0, 13).Value = "N/A"
                                .Offset(0, 14).Value = "N/A"
                                .Offset(0, 15).Value = "N/A"
                                .Offset(0, 16).Value = "N/A"
                                .Offset(0, 17).Value = .Offset(, 9).Value
                            End If
                    End If
                End If
            End With
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 10).Value <> "" And .Offset(0, 11).Value = "" Then
                                .Offset(0, 11).Value = "N/A"
                                .Offset(0, 12).Value = "N/A"
                                .Offset(0, 13).Value = "N/A"
                                .Offset(0, 14).Value = "N/A"
                                .Offset(0, 15).Value = "N/A"
                                .Offset(0, 16).Value = "N/A"
                                .Offset(0, 17).Value = .Offset(, 9).Value
                            End If
                    End If
                End If
            End With
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 11).Value <> "" And .Offset(0, 12).Value = "" Then
                                .Offset(0, 12).Value = "N/A"
                                .Offset(0, 13).Value = "N/A"
                                .Offset(0, 14).Value = "N/A"
                                .Offset(0, 15).Value = "N/A"
                                .Offset(0, 16).Value = "N/A"
                                .Offset(0, 17).Value = .Offset(, 9).Value
                            End If
                    End If
                End If
            End With
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 12).Value <> "" And .Offset(0, 13).Value = "" Then
                                .Offset(0, 13).Value = "N/A"
                                .Offset(0, 14).Value = "N/A"
                                .Offset(0, 15).Value = "N/A"
                                .Offset(0, 16).Value = "N/A"
                                .Offset(0, 17).Value = .Offset(, 12).Value
                            End If
                    End If
                End If
            End With
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 13).Value <> "" And .Offset(0, 14).Value = "" Then
                                .Offset(0, 14).Value = "N/A"
                                .Offset(0, 15).Value = "N/A"
                                .Offset(0, 16).Value = "N/A"
                                .Offset(0, 17).Value = .Offset(, 12).Value
                            End If
                    End If
                End If
            End With
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 14).Value <> "" And .Offset(0, 15).Value = "" Then
                                .Offset(0, 15).Value = "N/A"
                                .Offset(0, 16).Value = "N/A"
                                .Offset(0, 17).Value = .Offset(, 12).Value
                            End If
                    End If
                End If
            End With
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 15).Value <> "" And .Offset(0, 16).Value = "" Then
                                .Offset(0, 16).Value = "N/A"
                                .Offset(0, 17).Value = .Offset(, 12).Value
                            End If
                    End If
                End If
            End With
            With .Cells(Lrow, "A")
                If Not IsError(.Value) Then
                    If .Offset(0, 18).Value Like "*COPIER*" Or .Offset(0, 18).Value _
                        Like "*REMOVE*" Or .Offset(0, 19).Value = "YES" Then
                            If .Offset(0, 16).Value <> "" And .Offset(0, 17).Value = "" Then
                                .Offset(0, 17).Value = .Offset(, 12).Value
                            End If
                    End If
                End If
            End With
        Next Lrow
    End With

    ActiveWindow.View = ViewMode
    With Application
        .ScreenUpdating = True
        .Calculation = CalcMode
    End With

End Sub
i