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

Posted

技术标签:

【中文标题】Excel中的VBA和手动计算净现值【英文标题】:VBA in Excel and Manually Calculating Net Present Value 【发布时间】:2020-10-15 19:34:56 【问题描述】:
Sub npv()

Dim val As Long
Dim dr As Long
Dim inv As Long
Dim answer As Long
Dim i As Long

dr = Cells(1, 5).Value 'Cells(Row, Column)
inv = Cells(2, 5).Value
val = Cells(1, 1).Value
i = 0

ReDim cashFlow(1 To val) As Long

Do While i < val
    i = i + 1
    cashFlow(i) = Cells((i + 1), 1)
Loop

i = 0
    
Do While i < val
    i = i + 1
    answer = answer + cashFlow(i) / ((1 + dr) ^ i)
Loop

answer = answer - inv

Cells(4, 5).Value = answer

End Sub

您好,我想弄清楚为什么这不会输出正确的 NPV。初始投资为 500,贴现率为 0.17,现金流为 50、150、175、225,它输出的答案为 100.00。它应该是-118.35。我知道 excel 有这方面的公式,但需要手动完成。

【问题讨论】:

【参考方案1】:

你必须替换

Dim dr As Long

通过

dim dr as Double

否则,您的 0.17 折扣率将转换为 long,因此转换为 0

【讨论】:

谢谢,它现在可以完美运行了。只是出于好奇,'Variant' 也会起作用吗? 是的,VariantSingle 也可以。只需搜索 VBA 数据类型(例如 automateexcel.com/vba/data-types-variables-constants)

以上是关于Excel中的VBA和手动计算净现值的主要内容,如果未能解决你的问题,请参考以下文章

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

VBA:更新后无法自动重新计算 Excel 公式 - 需要手动交互

需要帮助使用 VBA 在 excel 中将超链接插入到我计算机上的指定图片

前后端结合解决Excel海量公式计算的性能问题

前后端结合解决Excel海量公式计算的性能问题

excel财务函数 计算年月日折旧值用啥函数?每个框填啥?最好有图,谢谢