2017-03-29 36 views
1

我是VBA的新手,我一直在尝试创建一个程序,允许我以一定的折扣率获得起始现金金额,折扣金额以及将折扣率乘以n年,以找到给定的基于给定年限的贴现现金流量。有没有人有任何提示,我可以如何使此代码更有效?此外,使用循环汇总不同数额的现金(如“(100/1.01)+(100/1.01^2)+(100/1.01^3)”)的一些提示是什么?提前致谢!如何改进DCF模型的原始VBA代码?

Sub DCF() 

Dim z As Double, CashFlow As Double, DiscRate As Double, Periods As Double 

CashFlow = InputBox("Enter initial cash flow: ", "Cash Flow") 
DiscRate = InputBox("Enter discount rate in decimal form: ", "Discount Rate") 
Periods = InputBox("How many periods (in years) are there?", "Periods") 

z = CashFlow/(1 + DiscRate)^Periods 

MsgBox Format(z, "$0.00") 

End Sub 
+0

更容易和更好的公式?你可以一次更改一个变量吗?想象一下,你想知道固定CashFlow和DiscRate的1到5年的结果吗?或将其转换为UDF(用户定义函数)并在工作表内使用3个输入范围? – PatricK

回答

1

您拥有的代码很好,只需要一个循环来创建贴现现金流量。这应该做你想做的事:

Sub DCF() 

    Dim z As Double, CashFlow As Double, DiscRate As Double, Periods As Double: z = 0# 

    CashFlow = InputBox("Enter initial cash flow: ", "Cash Flow") 
    DiscRate = InputBox("Enter discount rate in decimal form: ", "Discount Rate") 
    Periods = InputBox("How many periods (in years) are there?", "Periods") 

    Dim i As Integer 
    For i = 1 To Periods: 
    z = z + CashFlow/(1# + DiscRate)^i 
    Next 

    MsgBox Format(z, "$0.00") 

End Sub 
+0

感谢您的帮助。作为最后一个问题,代码中“1”和“0”旁边的“#”是什么? – user5716047

+0

如果只显示数字是双精度,请参阅此[post](http://stackoverflow.com/questions/2829128 /有趣的表示法,与) – Amorpheuses