Первая стратегия: оптимизировать саму функцию
Должен удвоить скорость
Public Function Yield(Name As String, Price As Double)
    Dim Lookup As Range, rw As Integer
    Set Lookup = Range("LookupRange")
    rw = Application.WorksheetFunction.Match(Name, Lookup.Resize(ColumnSize:=1), 0)
    Yield = 100 * Application.Run("otherCustomFunction", Lookup.Cells(rw, 3), Lookup.Cells(rw, 7), Price)
End Function
Это потому, что вы ищите диапазон с именем "LookupRange" только один раз, а не дважды, и вы ищете правую строку только один раз, а не дважды.
Вторая стратегия: получить диапазон только один раз авансом
Вероятно, в 4 раза быстрее
Если мы получим диапазон в коде, который использует функцию yield , мы должны сделать это только один раз
Public Function Yield(Lookup As Range, Name As String, Price As Double)
    rw = Application.WorksheetFunction.Match(Name, Lookup.Resize(ColumnSize:=1), 0)
    Yield = 100 * Application.Run("otherCustomFunction", Lookup.Cells(rw, 3), Lookup.Cells(rw, 7), Price)
End Function
Public Sub CallingRoutine()
    Dim Lookup As Range, rw As Integer
    Set Lookup = Range("LookupRange")
    ' Some code
    For Each someItem In someSet
        Dim amount As Double, Name As String, Price As Double
        ' Some code to deter;ine name and price
        amount = Yield(Lookup, Name, Price)
        ' Some code that used the yield
    Next someThing
End Sub
Есть вариант этой стратегии, где вы объявляете Lookup вне всех подпрограмм, как я делаю со словарем ниже.
Третья стратегия: поместите все соответствующие значения в словарь
На порядок быстрее, если вы звоните Yield ОЧЕНЬ часто.
- Вы смотрите названный диапазон 
 
- Вы спрашиваете все значения из Excel сразу 
 
- Вы ищите 
Name в словаре, что намного эффективнее, чем поиск в диапазоне     
Это код:
Public Function Yield(Name As String, Price As Double)
    If LookDict Is Nothing Then
        Set LookDict = New Dictionary
        Dim LookVal As Variant, rw As Integer, ToUse As ToUseType
        LookVal = Range("LookupRange").Value
        For rw = LBound(LookVal, 1) To UBound(LookVal, 1)
            Set ToUse = New ToUseType
            ToUse.Row3Val = LookVal(rw, 3)
            ToUse.Row7Val = LookVal(rw, 7)
            LookDict.Add LookVal(rw, 1), ToUse
        Next rw
    End If
    Set ToUse = LookDict.Item(Name)
    Yield = 100 * Application.Run("otherCustomFunction", _
                  ToUse.Row3Val, ToUse.Row7Val, Price)
End Function
Public Sub CallingRoutine()
    ' Some code
    For Each someItem In someSet
        Dim amount As Double, Name As String, Price As Double
        ' Some code to deter;ine name and price
        amount = Yield(Name, Price)
        ' Some code that used the yield
    Next someThing
End Sub