Home |
Search |
Today's Posts |
#5
![]()
Posted to microsoft.public.excel.misc
|
|||
|
|||
![]()
Interesting point. The VBA I pasted here is from a larger UDF that
calculates the yield on a bond. Here's the entire function. Perhaps this would explain the purpose of the loop: Function B_Yield_ISMA(Sett_d As Date, Mat_D As Date, Cpn As Double, Price As Double) As Double 'Calculates the yield of a coupon bearing bond (ISMA) Dim L As Double, t As Double, sz As Double, T1 As Double, T2 As Double, T3 As Double Dim k1 As Double, k2 As Double Dim n As Long L = Application.Days360(Sett_d, Mat_D) / 360 n = Int(L) t = L - n sz = Cpn * (1 - t) T1 = Application.Rate(L, Cpn, -Price, 100) If IsError(T1) Then T2 = -1 Else k1 = (-Application.PV(T1, n, Cpn, 100) + Cpn) / (1 + T1) ^ t - sz T2 = T1 + 0.00005 k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 + T2) ^ t - sz While Abs(kw - Price) 0.00005 T3 = T1 + (Price - k1) * (T2 - T1) / (k2 - k1) T1 = T2 k1 = k2 T2 = T3 k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 + t) ^ t - sz Wend B_Yield_ISMA = T2 End Function -- A hint to posters: Specific, detailed questions are more likely to be answered than questions that provide no detail about your problem. "Dana DeLouis" wrote: While Abs(kw - Price) 0.00005 As a side note, it is a little unusual here because both kw & Price do not get changed in the loop. It appears it could cause an endless loop. Usually, one or both get change in the loop so that eventually kw-Price falls below .00005. -- Dana DeLouis Windows XP & Office 2007 "Dave F" wrote in message ... Very helpful, thanks. Dave -- A hint to posters: Specific, detailed questions are more likely to be answered than questions that provide no detail about your problem. "Jim Thomlinson" wrote: While...Wend is just one of the control flow structures. I personally prefer Do...Loop but there is nothing wrong with While...Wend. Check out this link on the different control flow structures... http://msdn.microsoft.com/library/de...7ecff00da4.asp -- HTH... Jim Thomlinson "Dave F" wrote: What does WEND mean in VBA code, e.g.: While Abs(kw - Price) 0.00005 T3 = T1 + (Price - k1) * (T2 - T1) / (k2 - k1) T1 = T2 k1 = k2 T2 = T3 k2 = (-Application.PV(T2, n, Cpn, 100) + Cpn) / (1 + t) ^ t - sz Wend Does it merely mean While End, sort of like End If? Dave -- A hint to posters: Specific, detailed questions are more likely to be answered than questions that provide no detail about your problem. |