填充数组进行IRR计算
我试图build立一个函数来计算退休基金所需的回报率。 情况是这样的:退休人员在退休开始时有退休金的目标金额。 他们还有一个目标撤回金额,他们想每年提取一个目标年数。
例如:退休金额为100万美元。 每年提取10万美元,目标是15年。
我写的代码如下:
Function RequiredReturn(retire_amnt, annual_spending, n_year) Dim arr() ReDim arr(0) arr(0) = -retire_amnt ReDim arr(1 To n_year) For i = 1 To n_year arr(i) = annual_spending Next i RequireReturn = Application.WorksheetFunction.IRR(arr) End Function
这个function的目标是:
-
用第一个值(0)=负退休金额创build一个数组
-
从(1到n)中填入年度数额
-
在此调用IRR函数以find能够实现此现金stream量所需的最低年度回报。
如果通过将这个数组input到单元格中,然后使用IRR函数,那么所需的回报将是5.56%
显然这是行不通的。
我怎样才能改变这个正确填充数组? 如果填写正确,IRRfunction是否正确应用?
您将数组分配两次,第二个赋值覆盖第一个数组 – 这就是数组逻辑中的错误。
您可以通过将其定义为:
ReDim arr(0 To n_year)
这将给它n_year
+ 1时隙,其中第0时隙可以采取一次性总额( retire_amnt
)和1-n_year
采取年金支付( annual_spending
)。 那么你有一个IRR
计算的正确的数据结构。
下面的代码工作,并给你预期的结果5.56%
Option Explicit Sub Test() MsgBox Format(RequiredReturn(1000000, 100000, 15), "#.0000%") End Sub Function RequiredReturn(retire_amnt, annual_spending, n_year) Dim arr() As Variant Dim i As Long ReDim arr(0 To n_year) arr(0) = -retire_amnt For i = 1 To n_year arr(i) = annual_spending Next i RequiredReturn = Application.WorksheetFunction.IRR(arr) End Function
在资本外stream的情况下,我主要使用IRR
,然后是一系列同样定时的现金stream入。 但在年金回报率的情况下,我的理解是可以使用IRR
回报率,因为只要后续的现金stream出是相反的标志,起始金额是信用卡还是借记卡并不重要。 你可能不想冒这个风险,但:)
或者比你最初的方法更直接,使用RATE
公式
这将初始金额视为负值,即
Sub Test() MsgBox Format(RequiredReturn(-1000000, 100000, 15), "#.0000%") End Sub
选项
-
RequiredReturn = Application.Evaluate("=RATE(" & n_year & "," & annual_spending & "," & retire_amnt & ")")
-
RequiredReturn = Application.Rate(n_year, annual_spending, retire_amnt)