2017-03-27 61 views
2

我试图创建一个函数来计算退休基金的所需回报率。情况是这样的:退休人员在其退休开始时为其退休账户提供目标数额的资金。 他们还有一个目标撤回金额,他们希望每年提取一个目标年数。用于IRR计算的填充数组

例如:退休金额为1,000,000美元。每年提取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 

此功能的目的是:

  1. 创建具有所述第一值的阵列(0)=负退休量

  2. 用年审数量填充数组(1到n)

  3. 在此调用IRR函数以查找能够实现此现金流的最低所需年回报。

如果你输入这个数组进入细胞做,然后用IRR函数,所要求的回报是5.56%

显然,这是行不通的。

我怎样才能改变这个正确填充数组? 如果填写正确,IRR功能是否正确应用?

回答

0

您将数组分配两次,第二个赋值覆盖第一个数组 - 这就是数组逻辑中的错误。

可以通过定义它为固定阵列:

ReDim arr(0 To n_year) 

哪位能给它n_year + 1个时隙,其中第0槽可以采取包干(retire_amnt)和槽从1-n_year采取年金付款(annual_spending)。然后你有一个IRR计算的正确数据结构。

以下作品的代码,让您

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 

我在后面的,流动的一系列同样定时现金资本流出的情况下,主要用于IRR的5.56%的预期效果。但在年金回报率的情况下,我的理解是,IRR也可以使用,因为只要随后的现金流入/流出是相反的标志,只要起始金额是信用卡或借记卡就无关紧要了。你可能不希望冒险对此有何评论你的养老金虽然:)

1

或者更直接比你最初的方法,使用RATE公式

这就要求初始金额为负,即

Sub Test() 
    MsgBox Format(RequiredReturn(-1000000, 100000, 15), "#.0000%") 
End Sub 

选项

  1. RequiredReturn = Application.Evaluate("=RATE(" & n_year & "," & annual_spending & "," & retire_amnt & ")")
  2. RequiredReturn = Application.Rate(n_year, annual_spending, retire_amnt)