填充数组进行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的目标是:

  1. 用第一个值(0)=负退休金额创build一个数组

  2. 从(1到n)中填入年度数额

  3. 在此调用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 

选项

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