Another approach might be to use the PT, but add a PT refresh event handler to add the Budget numbers to each row
Option Explicit
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim rBudget As Range, rRow As Range
Dim vCompany As Variant, vBudgetSales As Variant, vBudgetGP As Variant
Dim sCompany As String
Dim n As Long
Set rBudget = Worksheets("2020 Plan").Cells(1, 1).CurrentRegion
With Application.WorksheetFunction
vCompany = .Transpose(rBudget.Columns(1))
vBudgetSales = .Transpose(rBudget.Columns(11))
vBudgetGP = .Transpose(rBudget.Columns(12))
End With
Application.ScreenUpdating = False
With Me
.Range("H:I").Delete
.Range("H1").Value = "Budget Sales"
.Range("I1").Value = "Budget GP"
.Range("H:H").NumberFormat = .Range("D2").NumberFormat
.Range("I:I").NumberFormat = .Range("E2").NumberFormat
.Range("D1").Copy
.Range("H1").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
.Range("E1").Copy
.Range("I1").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
For Each rRow In Intersect(Target.TableRange1.Rows, Target.DataBodyRange).Rows
With rRow.EntireRow
sCompany = .Cells(1).Value
n = 0
On Error Resume Next
n = Application.WorksheetFunction.Match(sCompany, vCompany, 0)
On Error GoTo 0
If n > 0 Then
.Cells(8).Value = .Cells(6).Value * vBudgetSales(n)
.Cells(9).Value = .Cells(7).Value * vBudgetGP(n)
End If
End With
Next
.Columns("H:I").AutoFit
End With
Application.ScreenUpdating = True
End Sub