填充数组以进行IRR计算

时间:2017-03-27 06:12:56

标签: excel excel-vba vba

我试图创建一个函数来计算退休基金的所需回报率。情况是这样的:退休人员在退休生效时有退休账户的目标金额。 他们还有一个目标提款金额,他们希望每年提取一个目标金额。

例如:退休基金金额为1,000,000美元。年度提款金额为100,000美元,目标为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. 创建一个数组
  3. 使用annual_spending数量从(1到n)填充数组

  4. 在此处调用IRR功能,以找到能够实现此现金流量所需的最低年度回报。

  5. 如果您要将此数组输入单元格,然后使用IRR函数,则所需的返回值为5.56%

    显然这不起作用。

    如何更改此设置以正确填充数组? 如果填充正确,IRR功能是否正确应用?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

您可以通过将数组定义为:

来修复数组
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

我主要在资本外流的情况下使用IRR,然后是一系列同等时间的现金流入。但在年金回报率的情况下,我的理解是IRR也可以使用,因为如果起始金额是信用卡或借记卡,只要后续的现金流入/流出是无关紧要的。相反的标志。您可能不希望因为该评论而冒险领取养老金:)