Please see my code below, for some reason it fails. can you help definitions: valdate = date today ipos = an indicator = +1 or -1 depending if a bond was bought or borrowed. notional = amount of bond bought or borrowed d1 = date when bond was launched d2 = date when bond matures freq = frequency of interest repayments coupon = interest rate used to calculate coupon repayments Function bondcashflow(valdate, ipos, notional, d1, d2, freq, coupon) Dim p, m As Integer Dim v() Dim cashflow() ReDim cashflow(2, m) As Variant Dim n As Long n = Application.Round(DateDiff(dateinterval.Day, d1, d2) / 365, 0) * freq For i = 0 To n - 1 If freq = 1 Then v(i) = DateAdd(dateinterval.Year, i, d1) ElseIf freq = 2 Then v(i) = DateAdd(dateinterval.Month, 6 * i, d1) ElseIf freq = 4 Then v(i) = DateAdd(dateinterval.Month, 3 * i, d1) Else: v(i) = DateAdd(dateinterval.Year, 12 * i, d1) End If m = 0 If valdate < v(i) Then m = m + 1 End If Next i p = n - m For k = 0 To p - 1 cashflow(k, 1) = v(m) Do While k < p - 1 cashflow(k, 2) = ipos * coupon * notional Loop Next k cashflow(p - 1, 2) = ipos * (notional + coupon * notional) bondcashflow = cashflow End Function