Function EuroFutIR(SettDate As Date, StartDate As Date, MatDate As Date, Buckets As Object, DateVec As Object, PVFact As Object) As Variant ' Computes the interest risk of a bond (change in price per % change in interest) Const DY = 365.25 Dim IRVec() As Double, BVec() As Double Dim n As Long, i As Long, j As Long n = Buckets.Columns.Count ReDim IRVec(1 To n) ReDim BVec(1 To n) For i = 1 To n BVec(i) = (Buckets(1, i) - SettDate) / DY IRVec(i) = 0 Next i Dim t_start As Double, t_mat As Double, df1 As Double, df2 As Double, IR As Double, FutAct As Double t_start = (StartDate - SettDate) / DY t_mat = (MatDate - SettDate) / DY df1 = inter2(DateVec, PVFact, StartDate) df2 = inter2(DateVec, PVFact, MatDate) IR = df1 * t_start * 0.01 For i = 1 To 2 If i = 1 Then FutAct = t_start Else FutAct = t_mat If FutAct >= BVec(n) Then IRVec(n) = IRVec(n) + IR ElseIf FutAct <= BVec(1) Then IRVec(1) = IRVec(1) + IR Else j = 1 Do While FutAct > BVec(j) j = j + 1 Loop j = j - 1 IRVec(j) = IRVec(j) + IR * (BVec(j + 1) - FutAct) / (BVec(j + 1) - BVec(j)) IRVec(j + 1) = IRVec(j + 1) + IR * (FutAct - BVec(j)) / (BVec(j + 1) - BVec(j)) End If IR = -df2 * t_mat * 0.01 Next i EuroFutIR = IRVec End Function