While Abs(kw - Price) > 0.00005
Does it merely mean While End, sort of like End If?Code: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
While Abs(kw - Price) > 0.00005
Does it merely mean While End, sort of like End If?Code: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
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. 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.
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:
Code: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
It appears to me that kw could be a typo. Looking at the code, my guess is that it should be : While Abs(k2 - Price) > 0.00005. It appears to loop until k2 (Pv) calculation is reduced to a value close to Price. Since "2" is next to "w" on the keyboard, my guess is that it should be k2, and not kw. You may be right. I got the code in an email from a colleague and have not had a chance to test it.
Wend The While statement repeats an action until a condition is true.
- While condition
- Stock
- Wend
If the condition is true, the actions specified in the procedure are performed. When the instruction Wend is reached, the procedure returns to the While statement and condition is again checked. If condition is always true, the process is repeated. If the condition is false, execution jumps to the first line of code following the statement Wend.
Bookmarks