Microsoft Excel - Macros - Copy - Copy formulae down on a sheet

' Copy formulae down on the Test1 sheet.
Sub Copy_Formulae_Down()
 
    Dim mycell As Variant
    Dim lastrow_Test1 As Long
    Dim Pmt_Curr As Variant
    Dim FX_Rate As Variant
 
 
 
    ' Ask user.
    If ctrl_ask_before_running_subroutine = True Then
        If MsgBox("Copy formulae down?", vbYesNo) = vbNo Then Exit Sub
    End If
 
 
    ' Update StatusBar.
    Application.StatusBar = "Copy formulae down..."
 
 
    With Workbooks(wb_name)
 
        With .Sheets("Test1")
 
            ' Activate the Test1 sheet.
            .Activate
 
 
            ' Get how many rows of data have been loaded into the sheet.
            lastrow_Test1 = .Cells(Rows.Count, 4).End(xlUp).Row
            ' Prevent line 2 being deleted - as this contains the formulae which need coping down later.
            If lastrow_Test1 < 3 Then
                lastrow_Test1 = 3
            End If
 
 
            ' Ensure that FX_Rate has a default value.
            'For Each mycell In Workbooks(my1042Rec).Sheets("Test1").Range("AE2", Range("AE65536").End(xlUp))
            For Each mycell In .Range("AE2:AE" & lastrow_Test1)
                If Not mycell Like "*[0-9]*" Then mycell.Formula = 1
            Next mycell
 
 
            ' Copy using autofill.
            .Range("A2:A2").AutoFill Destination:=.Range("A2:A" & lastrow_Test1)
            .Range("B2:C2").AutoFill Destination:=.Range("B2:C" & lastrow_Test1)
            .Range("E2").AutoFill Destination:=.Range("E2:E" & lastrow_Test1)
            .Range("K2:L2").AutoFill Destination:=.Range("K2:L" & lastrow_Test1)
 
 
            ' Copy using a resize.  Some say much quicker than alternative solutions, but not proven.
            ' Destination is lastrow -1 as need to exclude header row.
            'Dim rngSource As Range
            'Dim rngTarget As Range
            '    Set rngSource = .Range("A2:A2")
            '    Set rngTarget = Range("A2:A2")
            '    rngTarget.Resize(lastrow_Test1 - 1, rngSource.Columns.Count).Formula = rngSource.Formula
 
 
            ' Ensure that Payment Currency is set to something.  Default to USD for unknowns.
            For Each Pmt_Curr In .Range("G2:G" & lastrow_Test1)
                If RTrim(LTrim(Pmt_Curr)) = "" Then Pmt_Curr.Value = "USD"
            Next Pmt_Curr
 
 
            ' Ensure that the FX Rate is set to a valid number.  Default to 1 for unknowns.
            For Each FX_Rate In .Range("AE2:AE" & lastrow_Test1)
                If IsNumeric(FX_Rate) = False Then FX_Rate.Value = 1
            Next FX_Rate
 
 
            ' Calculations.
            .Range("E2:E" & lastrow_Test1).Calculate
            .Range("A2:A" & lastrow_Test1).Calculate
            .Range("K2:L" & lastrow_Test1).Calculate
            .Range("B2:C" & lastrow_Test1).Calculate
 
 
            ' Now copy and paste formula ranges as values to speed up the file processing.
            .Range("A3:A" & lastrow_Test1) = .Range("A3:A" & lastrow_Test1).Value
            .Range("B3:C" & lastrow_Test1) = .Range("B3:C" & lastrow_Test1).Value
            .Range("E3:E" & lastrow_Test1) = .Range("E3:E" & lastrow_Test1).Value
            .Range("K3:L" & lastrow_Test1) = .Range("K3:L" & lastrow_Test1).Value
 
 
            ' Select A1.
            ScrollTo ActiveSheet.name, "A1"
 
        End With
    End With
 
 
    ' Clear all objects.
    Set mycell = Nothing
    Set Pmt_Curr = Nothing
    Set FX_Rate = Nothing
 
End Sub

or

' Copies formulae down on the Sheet1 sheet.
Sub Copy_Formulae_Down()
 
    Dim lastrow_Sheet1 As Long
 
 
 
    ' Ask user.
    If ctrl_ask_before_running_subroutine = True Then
        If MsgBox("Copy formulae down?", vbYesNo) = vbNo Then Exit Sub
    End If
 
 
    ' Update StatusBar.
    Application.StatusBar = "Copy Formulae down..."
 
 
    With Workbooks(wb_name)
 
        With .Sheets("sheet1")
 
            ' Activate the sheet.
            .Activate
 
            ' Get how many rows of data have been loaded into the sheet.
            lastrow_Sheet1 = .Cells(Rows.Count, 4).End(xlUp).Row
            ' Prevent line 2 being deleted - as this contains the formulae which need coping down later.
            If lastrow_Sheet1 < 3 Then
                lastrow_Sheet1 = 3
            End If
 
 
            ' Copies formulae down.
            .Range("F2:F2").AutoFill Destination:=.Range("F2:F" & lastrow_Sheet1)
            .Range("F2:F" & lastrow_Sheet1).Calculate
            .Range("F3:F" & lastrow_Sheet1) = .Range("F3:F" & lastrow_Sheet1).Value
 
            .Range("H2:H2").AutoFill Destination:=.Range("H2:H" & lastrow_Sheet1)
            .Range("H2:H" & lastrow_Sheet1).Calculate
            .Range("H3:H" & lastrow_Sheet1) = .Range("H3:H" & lastrow_Sheet1).Value
 
            .Range("J2:J2").AutoFill Destination:=.Range("J2:J" & lastrow_Sheet1)
            .Range("J2:J" & lastrow_Sheet1).Calculate
            .Range("J3:J" & lastrow_Sheet1) = .Range("J3:J" & lastrow_Sheet1).Value
 
            .Range("L2:L2").AutoFill Destination:=.Range("L2:L" & lastrow_Sheet1)
            .Range("L2:L" & lastrow_Sheet1).Calculate
            .Range("L3:L" & lastrow_Sheet1) = .Range("L3:L" & lastrow_Sheet1).Value
 
            .Range("M2:M2").AutoFill Destination:=.Range("M2:M" & lastrow_Sheet1)
            .Range("M2:M" & lastrow_Sheet1).Calculate
            .Range("M3:M" & lastrow_Sheet1) = .Range("M3:M" & lastrow_Sheet1).Value
 
            .Range("T2:T2").AutoFill Destination:=.Range("T2:T" & lastrow_Sheet1)
            .Range("T2:T" & lastrow_Sheet1).Calculate
            .Range("T3:T" & lastrow_Sheet1) = .Range("T3:T" & lastrow_Sheet1).Value
 
            .Range("V2:V2").AutoFill Destination:=.Range("V2:V" & lastrow_Sheet1)
            .Range("V2:V" & lastrow_Sheet1).Calculate
            .Range("V3:V" & lastrow_Sheet1) = .Range("V3:V" & lastrow_Sheet1).Value
 
            .Range("W2:W2").AutoFill Destination:=.Range("W2:W" & lastrow_Sheet1)
            .Range("W2:W" & lastrow_Sheet1).Calculate
            .Range("W3:W" & lastrow_Sheet1) = .Range("W3:W" & lastrow_Sheet1).Value
 
            .Range("X2:X2").AutoFill Destination:=.Range("X2:X" & lastrow_Sheet1)
            .Range("X2:X" & lastrow_Sheet1).Calculate
            .Range("X3:X" & lastrow_Sheet1) = .Range("X3:X" & lastrow_Sheet1).Value
 
            .Range("AB2:AB2").AutoFill Destination:=.Range("AB2:AB" & lastrow_Sheet1)
            .Range("AB2:AB" & lastrow_Sheet1).Calculate
            .Range("AB3:AB" & lastrow_Sheet1) = .Range("AB3:AB" & lastrow_Sheet1).Value
 
            .Range("AC2:AC2").AutoFill Destination:=.Range("AC2:AC" & lastrow_Sheet1)
            .Range("AC2:AC" & lastrow_Sheet1).Calculate
            .Range("AC3:AC" & lastrow_Sheet1) = .Range("AC3:AC" & lastrow_Sheet1).Value
 
            .Range("AE2:AE2").AutoFill Destination:=.Range("AE2:AE" & lastrow_Sheet1)
            .Range("AE2:AE" & lastrow_Sheet1).Calculate
            .Range("AE3:AE" & lastrow_Sheet1) = .Range("AE3:AE" & lastrow_Sheet1).Value
 
            .Range("AG2:AG2").AutoFill Destination:=.Range("AG2:AG" & lastrow_Sheet1)
            .Range("AG2:AG" & lastrow_Sheet1).Calculate
            .Range("AG3:AG" & lastrow_Sheet1) = .Range("AG3:AG" & lastrow_Sheet1).Value
 
            .Range("AH2:AH2").AutoFill Destination:=.Range("AH2:AH" & lastrow_Sheet1)
            .Range("AH2:AH" & lastrow_Sheet1).Calculate
            .Range("AH3:AH" & lastrow_Sheet1) = .Range("AH3:AH" & lastrow_Sheet1).Value
 
            .Range("AJ2:AJ2").AutoFill Destination:=.Range("AJ2:AJ" & lastrow_Sheet1)
            .Range("AJ2:AJ" & lastrow_Sheet1).Calculate
            .Range("AJ3:AJ" & lastrow_Sheet1) = .Range("AJ3:AJ" & lastrow_Sheet1).Value
 
            .Range("AK2:AK2").AutoFill Destination:=.Range("AK2:AK" & lastrow_Sheet1)
            .Range("AK2:AK" & lastrow_Sheet1).Calculate
            .Range("AK3:AK" & lastrow_Sheet1) = .Range("AK3:AK" & lastrow_Sheet1).Value
 
            .Range("AL2:AL2").AutoFill Destination:=.Range("AL2:AL" & lastrow_Sheet1)
            .Range("AL2:AL" & lastrow_Sheet1).Calculate
            .Range("AL3:AL" & lastrow_Sheet1) = .Range("AL3:AL" & lastrow_Sheet1).Value
 
            .Range("AN2:AN2").AutoFill Destination:=.Range("AN2:AN" & lastrow_Sheet1)
            .Range("AN2:AN" & lastrow_Sheet1).Calculate
            .Range("AN3:AN" & lastrow_Sheet1) = .Range("AN3:AN" & lastrow_Sheet1).Value
 
            .Range("AO2:AO2").AutoFill Destination:=.Range("AO2:AO" & lastrow_Sheet1)
            .Range("AO2:AO" & lastrow_Sheet1).Calculate
            .Range("AO3:AO" & lastrow_Sheet1) = .Range("AO3:AO" & lastrow_Sheet1).Value
 
            .Range("AP2:AP2").AutoFill Destination:=.Range("AP2:AP" & lastrow_Sheet1)
            .Range("AP2:AP" & lastrow_Sheet1).Calculate
            .Range("AP3:AP" & lastrow_Sheet1) = .Range("AP3:AP" & lastrow_Sheet1).Value
 
            .Range("AQ2:AQ2").AutoFill Destination:=.Range("AQ2:AQ" & lastrow_Sheet1)
            .Range("AQ2:AQ" & lastrow_Sheet1).Calculate
            .Range("AQ3:AQ" & lastrow_Sheet1) = .Range("AQ3:AQ" & lastrow_Sheet1).Value
 
            .Range("AR2:AR2").AutoFill Destination:=.Range("AR2:AR" & lastrow_Sheet1)
            .Range("AR2:AR" & lastrow_Sheet1).Calculate
            .Range("AR3:AR" & lastrow_Sheet1) = .Range("AR3:AR" & lastrow_Sheet1).Value
 
            .Range("AS2:AS2").AutoFill Destination:=.Range("AS2:AS" & lastrow_Sheet1)
            .Range("AS2:AS" & lastrow_Sheet1).Calculate
            .Range("AS3:AS" & lastrow_Sheet1) = .Range("AS3:AS" & lastrow_Sheet1).Value
 
            .Range("AT2:AT2").AutoFill Destination:=.Range("AT2:AT" & lastrow_Sheet1)
            .Range("AT2:AT" & lastrow_Sheet1).Calculate
            .Range("AT3:AT" & lastrow_Sheet1) = .Range("AT3:AT" & lastrow_Sheet1).Value
 
            .Range("AV2:AV2").AutoFill Destination:=.Range("AV2:AV" & lastrow_Sheet1)
            .Range("AV2:AV" & lastrow_Sheet1).Calculate
            .Range("AV3:AV" & lastrow_Sheet1) = .Range("AV3:AV" & lastrow_Sheet1).Value
 
            .Range("AW2:AW2").AutoFill Destination:=.Range("AW2:AW" & lastrow_Sheet1)
            .Range("AW2:AW" & lastrow_Sheet1).Calculate
            .Range("AW3:AW" & lastrow_Sheet1) = .Range("AW3:AW" & lastrow_Sheet1).Value
 
            .Range("AX2:AX2").AutoFill Destination:=.Range("AX2:AX" & lastrow_Sheet1)
            .Range("AX2:AX" & lastrow_Sheet1).Calculate
            .Range("AX3:AX" & lastrow_Sheet1) = .Range("AX3:AX" & lastrow_Sheet1).Value
 
            .Range("AY2:AY2").AutoFill Destination:=.Range("AY2:AY" & lastrow_Sheet1)
            .Range("AY2:AY" & lastrow_Sheet1).Calculate
            .Range("AY3:AY" & lastrow_Sheet1) = .Range("AY3:AY" & lastrow_Sheet1).Value
 
            .Range("BB2:BB2").AutoFill Destination:=.Range("BB2:BB" & lastrow_Sheet1)
            .Range("BB2:BB" & lastrow_Sheet1).Calculate
            .Range("BB3:BB" & lastrow_Sheet1) = .Range("BB3:BB" & lastrow_Sheet1).Value
 
            .Range("BD2:BD2").AutoFill Destination:=.Range("BD2:BD" & lastrow_Sheet1)
            .Range("BD2:BD" & lastrow_Sheet1).Calculate
            .Range("BD3:BD" & lastrow_Sheet1) = .Range("BD3:BD" & lastrow_Sheet1).Value
 
            .Range("BE2:BE2").AutoFill Destination:=.Range("BE2:BE" & lastrow_Sheet1)
            .Range("BE2:BE" & lastrow_Sheet1).Calculate
            .Range("BE3:BE" & lastrow_Sheet1) = .Range("BE3:BE" & lastrow_Sheet1).Value
 
            .Range("BG2:BG2").AutoFill Destination:=.Range("BG2:BG" & lastrow_Sheet1)
            .Range("BG2:BG" & lastrow_Sheet1).Calculate
            .Range("BG3:BG" & lastrow_Sheet1) = .Range("BG3:BG" & lastrow_Sheet1).Value
 
            .Range("BH2:BH2").AutoFill Destination:=.Range("BH2:BH" & lastrow_Sheet1)
            .Range("BH2:BH" & lastrow_Sheet1).Calculate
            .Range("BH3:BH" & lastrow_Sheet1) = .Range("BH3:BH" & lastrow_Sheet1).Value
 
            .Range("BI2:BI2").AutoFill Destination:=.Range("BI2:BI" & lastrow_Sheet1)
            .Range("BI2:BI" & lastrow_Sheet1).Calculate
            .Range("BI3:BI" & lastrow_Sheet1) = .Range("BI3:BI" & lastrow_Sheet1).Value
 
            .Range("BJ2:BJ2").AutoFill Destination:=.Range("BJ2:BJ" & lastrow_Sheet1)
            .Range("BJ2:BJ" & lastrow_Sheet1).Calculate
            .Range("BJ3:BJ" & lastrow_Sheet1) = .Range("BJ3:BJ" & lastrow_Sheet1).Value
 
            .Range("BK2:BK2").AutoFill Destination:=.Range("BK2:BK" & lastrow_Sheet1)
            .Range("BK2:BK" & lastrow_Sheet1).Calculate
            .Range("BK3:BK" & lastrow_Sheet1) = .Range("BK3:BK" & lastrow_Sheet1).Value
 
            .Range("BL2:BL2").AutoFill Destination:=.Range("BL2:BL" & lastrow_Sheet1)
            .Range("BL2:BL" & lastrow_Sheet1).Calculate
            .Range("BL3:BL" & lastrow_Sheet1) = .Range("BL3:BL" & lastrow_Sheet1).Value
 
            .Range("BM2:BM2").AutoFill Destination:=.Range("BM2:BM" & lastrow_Sheet1)
            .Range("BM2:BM" & lastrow_Sheet1).Calculate
            .Range("BM3:BM" & lastrow_Sheet1) = .Range("BM3:BM" & lastrow_Sheet1).Value
 
        End With
    End With
End Sub