Excel 中分组循环 CF 的净现值

Posted

技术标签:

【中文标题】Excel 中分组循环 CF 的净现值【英文标题】:Net Present Value in Excel for Grouped Recurring CF 【发布时间】:2016-07-13 18:46:50 【问题描述】:

下面是 60 个时期的现金流量表。

有一组经常性现金流。 excel 中有没有一种简单的方法来计算所有 60 个期间(每月现金流)的 NPV,而不必创建一个 60 行的表并使用 NPV 公式?

所以 60 个订单项的公式应该是这样的:

=NPV(PERIODIC RATE, VALUES OF CF 1 - 60) + CF0

但是,如果您知道 excel 中存在经常性现金流并且不必枚举所有 60 行,您可以缩短它吗?

提前致谢。

【问题讨论】:

【参考方案1】:

没有内置函数可以做到这一点,但我们可以自己构建。这是一个UDF(用户定义函数):

Function myNPV(rate As Double, vl As Range, times As Range)
If vl.Cells.Count <> times.Cells.Count Then Exit Function
Dim vlArr() As Variant
Dim timesArr() As Variant
Dim ovlArr() As Double
Dim i&, j&, t&, cnt&

vlArr = vl.Value
timesArr = times.Value
For i = LBound(vlArr, 1) To UBound(vlArr, 1)
    If vlArr(i, 1) <> "" Then
        t = t + timesArr(i, 1)
    End If
Next i
cnt = 1
ReDim ovlArr(1 To t)
For i = LBound(vlArr, 1) To UBound(vlArr, 1)
    If vlArr(i, 1) <> "" Then
        For j = 1 To timesArr(i, 1)
            ovlArr(cnt) = vlArr(i, 1)
            cnt = cnt + 1
        Next j
    End If
Next i

myNPV = Application.WorksheetFunction.NPV(rate, ovlArr)

End Function

在工作簿中按 Alt-F11。这将打开 VBE。

转到插入并插入一个模块。这将打开一个新模块。复制并粘贴上面的代码。

你可以像任何其他公式一样调用它:

=myNPV(C20/C19,B3:B17,C3:C17)+B2

这有三个标准:每次的费率、金额范围和相应的次数。

【讨论】:

【参考方案2】:

您可以使用年金公式

D1 中使用=1/($B$7/12)*(1-1/(1+$B$7/12)^C1)*B1*1/(1+$B$7/12)^(SUM($C$1:C1)-12) 并复制下来

【讨论】:

谢谢。你能打出你使用变量的财务公式并解释和给出财务背景吗?

以上是关于Excel 中分组循环 CF 的净现值的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:Database 96.净现值查询

Excel的现值函数都有哪些(名称和功能 )?

VB中如何读取Excel中的数据

Excel中的VBA和手动计算净现值

matlab中,如何在for循环中把每一个元胞数组都写成excel文件

.NET CF 上的游戏循环和 GDI