I would also use Variants here since it will always save you having to do two calculations and possibly three. Further, I would load the entire range into a Variant to start with rather than reading cell by cell. It should be considerably faster with thousands of cells.
The following code is modified to do the Evaluation once only, but how to apply the rest I do not understand.
Public Function SumVlookups(ByVal Lookupvalue As Single, ByVal RangeToSum As Range) As Single Dim ArrayStr As Range Dim Found As Variant For Each ArrayStr In RangeToSum Found = Evaluate(ArrayStr.Value) If Not IsError(Application.VLookup(Lookupvalue, Found, 1, False)) Then SumVlookups = SumVlookups + Application.VLookup(Lookupvalue, Found, 2, False) Next ArrayStrEnd Function