我试图创建一个函数来计算退休基金的所需回报率。情况是这样的:退休人员在退休生效时有退休账户的目标金额。 他们还有一个目标提款金额,他们希望每年提取一个目标金额。
例如:退休基金金额为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
此功能的目标是:
使用第一个值(0)=负退休金额
使用annual_spending数量从(1到n)填充数组
在此处调用IRR功能,以找到能够实现此现金流量所需的最低年度回报。
如果您要将此数组输入单元格,然后使用IRR函数,则所需的返回值为5.56%
显然这不起作用。
如何更改此设置以正确填充数组? 如果填充正确,IRR功能是否正确应用?
答案 0 :(得分:1)
或者比您的初始方法更直接,使用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)
答案 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
也可以使用,因为如果起始金额是信用卡或借记卡,只要后续的现金流入/流出是无关紧要的。相反的标志。您可能不希望因为该评论而冒险领取养老金:)