You missed out the variable definitions, which are also important (eg: an Integer is noticeably faster than a Variant, and a Long is faster still). I have made guesses as to what the data type of each variable should be, but they may not be ideal.
It would have helped to see the code for the functions, but your explanation is probably enough. Note that calling functions is very slow - so simply putting the code into the loop will make a significant speed improvement.
As I suspected, you are doing work inside the For loop that does not need to be done each time (eg: TotalExp / (t10 - arbval)), as it could be done outside that loop, and stored in a variable. This means that this calculation is done much less often - only once for every 365 times it was done before.
Similar can be done with (t10 - i) , by calculating all 365 values before the Do, and storing these values to an array. As an array-read needs to be done each time the gain each time is lower, but due to the number of times this calculation could be done (365 * (1/0.001) * (200000) = 73,000,000,000 !) the improvement it brings will almost certainly be noticeable!
Here's the code with those changes, see what kind of speed improvement you get:
Code:
Dim TargetValue As Long, i As Long
Dim arbval As Double, Totflo As Double
Dim t10 As Double, TotalExp As Double
Dim t10_arbval As Double, t10_i(365) As Double
'this does not need to be an array, as it is only used temporarily
'Dim SixFlow(365) As Double
Dim SixFlow As Double
TargetValue = 1500
arbval = -100000 ' this is intial value assumed as the goal seek value
t10 = ????
TotalExp = ????
'calculate all values of (t10 - i)
For i = 1 To 365
t10_i(i) = (t10 - i)
Next i
Do
'calculate value of (t10 - arbval), since it will not change inside the For loop
t10_arbval = (t10 - arbval)
Totflo = 0
For i = 1 To 365
'find value of (TotalExp / (t10 - arbval) * (t10 - i))
SixFlow = TotalExp / (t10_arbval * t10_i(i))
'get maxValue( )
If 0 > SixFlow Then SixFlow = 0
'get minValue( ), and add it to our total (combining it like this is quicker)
If TotalExp < SixFlow Then
Totflo = Totflo + TotalExp
Else
Totflo = Totflo + SixFlow
End If
Next i
arbval = arbval + 0.001
Loop While Totflo <= TargetValue
I'm not sure if the binary search is appropriate for your calculation.. to work it out (or determine better options) it would be best for us to know what kind of values you are expecting for t10 and TotalExp.