Вы могли бы подумать о чем-то вроде этого:
Public Function GetDollar(NOM) As Double
Dim RNG1 As String, RNG2 As String, RNG3 As String, LR As Double
With ActiveWorkbook.Sheets(1)
LR = .Cells(Rows.Count, 2).End(xlUp).Row
RNG1 = .Range(.Cells(1, 2), .Cells(LR, 2)).Address
RNG2 = .Range(.Cells(1, 3), .Cells(LR, 3)).Address
RNG3 = .Range(.Cells(1, 4), .Cells(LR, 4)).Address
GetDollar = .Evaluate("=INDEX(" & RNG3 & ",MATCH(""" & NOM & """&MAX((" & RNG1 & "=""" & NOM & """)*" & RNG2 & ")," & RNG1 & "&" & RNG2 & ",0))")
End With
End Function
![enter image description here](https://i.stack.imgur.com/rXfFZ.png)
Если в вашем случае вы хотите иметь оба столбца E иG, вам понадобятся еще два UDF, поскольку вы не можете изменять значения других ячеек с помощью UDF.