Hallo Bachus,
 dein neuer Code enthält nicht die Korrekturen, die ich dir bereits genannt habe, dafür aber zusätzliche Fehler. Ich habe dir die Korrekturen in die Ausgangsfassung eingefügt. Damit du BlackScholes, was das auch immer ist, aufrufen kannst, solltest du S, K, T, r und TargetPrice öffentlich deklarieren, weil sie in der Funktion ImVola nicht initialisiert werden und daher bestenfalls den lokalen Wert 0 oder Leerstring haben. Es braucht differenz = 0 nicht erreicht zu werden. Ich würde das Abbruchkriterium für die Do-Loop-Schleife so wählen, dass hinreichende Genauigkeit erreicht wird.
 
 Function ImVola(S As Double, K As Double, _
 T As Double, r As Double, TargetPrice As Double, _
 Optional PutCall As String = "CALL")
 
 Application.Volatile 'ist das wirklich erforderlich?
 
 Dim x1 As Double, x2 As Double
 Dim differenz As Double, sigma As Double
 
 x1 = 0
 x2 = 20
 
 Do While Abs(differenz) > 0.0000000001 'oder ein passender Wert
 'Do While differenz <> 0
 
 sigma = (x2 - x1 / 2)
 
 differenz = (BlackScholes(S, K, T, r, sigma, [PutCall as String="call"])) - TargetPrice
 
 If differenz > 0 Then x2 = sigma Else x1 = sigma 'falls =0 wird Schleife verlassen
 'If differenz > 0 Then x2 As sigma
 'If differenz  0 Then GoTo part1
     if differenz  0 Then GoTo part1
     
     If differenz  0
     
     sigma = (x2 - x1 / 2)
 
     differenz = (BlackScholes(S, K, T, r, sigma, [PutCall as String="call"])) - TargetPrice
     
     If differenz > 0 Then x2 As sigma
     If differenz < 0 Then x1 As sigma
     
     
     Next
     
     ImVola = sigma
 
 End Function
 
 Vielen Dank im voraus ;)     |