Or, instead of writing a formula to the cells, calculate and write the sums with the macro:
Option Explicit
Sub TaxExpense()
Dim Acct6000 As Range, _
AcctDescr As Range, _
AcctRec As Range, _
ProRateInfl As Range, _
Counter As Long, _
TaxExpRow As Long, _
VarianceRow As Long, _
Accumulator As Double, _
t0 As Double, _
TaxYear As Variant
t0 = Timer
With Application
.ScreenUpdating = False ' turn off screen flicker
.EnableEvents = False ' turn off events
.DisplayAlerts = False
.Calculation = xlCalculationManual
.AskToUpdateLinks = False 'suppress asking for update
End With
With Range("D:D")
Set Acct6000 = .Find(6000)
Counter = WorksheetFunction.CountIf(Range("D:D"), 6000)
Set Acct6000 = Acct6000.Resize(rowsize:=Counter)
End With
For Each TaxYear In Array(2018, 2019)
'find the row to insert PERIOD SUMS
For Each AcctDescr In Range("G:G")
If AcctDescr.Value = "PAYROLL TAX EXPENSE" And AcctDescr.Offset(ColumnOffset:=1).Value = TaxYear Then
TaxExpRow = AcctDescr.Row
End If
'find the row to insert variances
If AcctDescr.Value = "PAYROLL TAX EXPENSE" And AcctDescr.Offset(ColumnOffset:=1).Value = "Variance" Then
VarianceRow = AcctDescr.Row
Exit For
End If
Next AcctDescr
'Total up expenses for each period
For Each ProRateInfl In Range("J2:U2")
For Each AcctRec In Acct6000
If AcctRec.Offset(ColumnOffset:=4).Value = TaxYear Then
Accumulator = Accumulator + AcctRec.Offset(ColumnOffset:=ProRateInfl.Column - AcctRec.Column).Value
End If
Next AcctRec
'format total
Accumulator = Round(Accumulator * 0.085 * ProRateInfl.Value, 2)
' ** write to tax expense cells **
Cells(TaxExpRow, ProRateInfl.Column).Value = Accumulator
Next ProRateInfl
Next TaxYear
With Application
.ScreenUpdating = True
.EnableEvents = True
.DisplayAlerts = True
.Calculation = xlCalculationAutomatic
.AskToUpdateLinks = False
End With
MsgBox Round((Timer - t0), 3) & " Sec"
End Sub
Bookmarks