Function floor(Sett_d As Date, strike_r As Double, first_fixing_d As Date, last_payment_d As Date, vola As Double, Date_v As Object, PV_v As Object) As Double ' Valuation of floors (given dates and pv's) Dim Filter As Double Dim X As Double Filter = 10 X = strike_r / 100 Dim t_a As Date, t_b As Date t_a = first_fixing_d t_b = last_payment_d Dim n As Long, i As Long n = Int(Application.Days360(t_a, t_b) / 180) Dim from_d As Date, to_d As Date Dim T1 As Double, T2 As Double, zwi As Double, d1 As Double, d2 As Double, thathelps As Double For i = 0 To n - 1 from_d = Application.Run("Edate", t_a, 6 * i) to_d = Application.Run("Edate", t_a, 6 * (1 + i)) T1 = Application.Days360(Sett_d, from_d) / 360 r = (df(Date_v, PV_v, Sett_d, from_d) / df(Date_v, PV_v, Sett_d, to_d) - 1) * 360 / (to_d - from_d) d1 = (Log(r / X) + 0.5 * vola ^ 2 * T1) / (vola * T1 ^ 0.5) d2 = d1 - vola * T1 ^ 0.5 thathelps = r * Application.NormSDist(d1) - X * Application.NormSDist(d2) - r + X zwi = df(Date_v, PV_v, Sett_d, from_d) * thathelps * (to_d - from_d) / 360 * 100 floor = floor + zwi Next End Function