You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Excel VBA自定义CIRR函数计算储蓄保险IRR?

修改后的VBA IRR函数(适配储蓄保险场景)

原代码的核心问题是没有区分缴费年限和保单年限——它默认领取时间等于缴费结束时间,但实际储蓄保险是缴费期结束后,还要经过若干年才领取。下面是修改后的代码,专门适配你的需求:

Function CIRR(TotalPremiumPaid As Double, PaymentTerm As Integer, PolicyTerm As Integer, FinalValue As Double, Optional Guess As Double = 0.1) As Double
    ' 参数校验:避免无效输入
    If TotalPremiumPaid <= 0 Or PaymentTerm <= 0 Or PolicyTerm <= PaymentTerm Or FinalValue <= 0 Then
        CIRR = CVErr(xlErrValue)
        Exit Function
    End If
    
    Dim eachValue As Double
    eachValue = TotalPremiumPaid / PaymentTerm ' 计算年缴保费
    
    Dim cashFlow() As Double
    ReDim cashFlow(0 To PolicyTerm) ' 现金流数组覆盖整个保单周期(从第0年到第PolicyTerm年)
    
    ' 1. 填充缴费期的现金流(每年投入年缴保费)
    Dim n As Integer
    For n = 0 To PaymentTerm - 1
        cashFlow(n) = -eachValue
    Next n
    
    ' 2. 填充缴费结束到领取前的现金流(无进出,为0)
    For n = PaymentTerm To PolicyTerm - 1
        cashFlow(n) = 0
    Next n
    
    ' 3. 填充到期领取的现金流
    cashFlow(PolicyTerm) = FinalValue
    
    ' 计算IRR,加入默认猜测值(避免IRR函数因初始值问题返回错误)
    CIRR = IRR(cashFlow, Guess)
End Function

关键改动说明

  • 新增PolicyTerm参数:明确区分缴费年限和保单总年限
  • 扩展现金流数组:覆盖整个保单周期,中间无现金流的年份填充0
  • 增加参数校验:防止负数、缴费年限大于保单年限等无效输入
  • 加入可选的Guess参数:给IRR函数提供默认初始猜测值(10%),减少计算错误概率

使用示例

针对你给出的案例:

  • 已缴总保费=50000元
  • 缴费年限=5年
  • 保单年限=20年
  • 到期领取金额=125000元

在Excel单元格中输入公式:

=CIRR(50000,5,20,125000)

计算结果约为4.63%(符合储蓄保险的常规收益区间)

内容的提问来源于stack exchange,提问作者ErnestHub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 14:53:33