如何在 Excel 中计算年金现值
有人给你两个选择:未来五年每年领 1,000 元,或者现在一次性拿一笔钱。那串付款到底今天值多少?答案取决于你选用的折现率,而把每笔未来付款折回今天再加总的计算过程,就是年金现值。
这是金融里最常用的计算之一:贷款定价、债券估值、养老金精算、租赁会计处理,以及一切"一次性 vs. 分期"的决策都离不开它。在 Excel 里一个单元格就能搞定。
本文分三种场景讲解——普通年金(每期期末固定付款)、期初年金(每期期初付款)、以及增长年金(付款逐期递增)——给出公式、Excel 实现和交叉验证。
年金现值衡量什么
年金现值是在给定折现率下,与一串等额未来付款在财务上等价的一次性金额。它回答的问题是:"如果我能以利率 投资,我今天需要存多少钱,才能恰好复制出这串付款流?"
背后的逻辑是货币的时间价值:今天的 1 元比明年的 1 元值钱,因为今天那 1 元可以拿去投资、赚取利息。因此每一笔未来付款折算到今天都会越来越"缩水"。年金现值就是所有这些折现后金额的加总。
两个输入至关重要:
- 折现率。 没有唯一"正确"的数字——这是一个判断。无风险现金流(比如政府担保的养老金)用国债收益率;风险更高的现金流(比如预期租金收入)用更高的利率来反映风险。利率越高,现值越低。
- 付款时点。 期末付款(普通年金)和期初付款(期初年金)差一个折现周期。当利率较高或期数较长时,这个区别影响显著。
普通年金:每期期末固定付款
公式
其中:
- 是每期付款金额。
- 是每期折现率。
- 是期数。
分式部分 就是 PVIFA——年金现值系数——在另一篇指南中有详细讲解。这里直接带入付款金额使用。
在 Excel 中计算
按下表布局:
| 单元格 | 内容 |
|---|---|
A1 | Payment |
A2 | 1000 |
B1 | Rate |
B2 | 0.05 |
C1 | Periods |
C2 | 5 |
D1 | Present Value |
D2 | (输入公式) |
在 D2 中使用 Excel 内置 PV 函数:
=-PV(B2, C2, A2, 0, 0)
参数含义:
rate——每期折现率(B2)。nper——期数(C2)。pmt——每期付款金额(A2)。Excel 默认把付款视为流出,所以当pmt为正时PV返回负数。前面的负号将其翻转为正的现值。fv——终值,填0(除年金外无额外一次性现金流)。type——0表示普通年金(期末付款)。
每年 1,000 元、5% 折现率、5 年,Excel 返回 $4,329.48。
闭式公式交叉验证
在 D4 输入 Formula check,D5 输入:
=A2*(1-(1+B2)^-C2)/B2
结果同样是 4329.48,确认 PV 函数的结果无误。

期初年金变体
如果付款发生在每期期初(房租、租赁付款、一些退休金缴款),只需把 type 参数改为 1:
=-PV(B2, C2, A2, 0, 1)
同样的输入下返回 $4,545.95——比普通年金高约 5%,因为每笔付款提前一期到账、少折现一个周期。
也可以把普通年金的结果乘以 :
=-PV(B2, C2, A2, 0, 0)*(1+B2)
两种方法结果一致。
增长年金:逐期递增的付款
增长年金是每笔付款以固定增长率 递增的现金流。现实中的例子:每年涨薪 3%、带有年度递增条款的租赁合同、稳定增长的股息等。
Excel 没有内置的增长年金函数,需要手动输入公式。
公式(当 时)
其中:
- 是第一期付款(后续每期付款为 )。
- 是每期折现率。
- 是每期增长率。
- 是期数。
注意:此公式要求 。当 时分母为零,现值简化为 。
在 Excel 中计算
按下表布局:
| 单元格 | 内容 |
|---|---|
A1 | First Payment |
A2 | 1000 |
B1 | Rate |
B2 | 0.05 |
C1 | Growth Rate |
C2 | 0.03 |
D1 | Periods |
D2 | 5 |
E1 | Present Value |
E2 | (输入公式) |
在 E2 中输入:
=A2*(1-((1+C2)/(1+B2))^D2)/(B2-C2)
首期付款 1,000 元、折现率 5%、增长率 3%、5 年,Excel 返回 $4,583.92。
这比普通年金的 $4,329.48 更高,因为后续每期付款逐渐增大(第二期 $1,030,第三期 $1,060.90,依此类推)。
逐笔折现交叉验证
为了验证,可以搭一个小表格,分别折现每年的付款:
| 年份 | 付款金额 | PVIF | 折现后金额 |
|---|---|---|---|
| 1 | $1,000.00 | 0.9524 | $952.38 |
| 2 | $1,030.00 | 0.9070 | $934.24 |
| 3 | $1,060.90 | 0.8638 | $916.50 |
| 4 | $1,092.73 | 0.8227 | $899.13 |
| 5 | $1,125.51 | 0.7835 | $881.68 |
| 合计 | $4,583.92 |
加总与闭式公式结果一致。

边界情况:当 时
如果折现率等于增长率,标准公式分母为零。此时现值为:
在 Excel 中可以用 IF 语句同时处理两种情况:
=IF(B2=C2, A2*D2/(1+B2), A2*(1-((1+C2)/(1+B2))^D2)/(B2-C2))
无论 和 是否相等,都能返回正确结果。
实际应用场景
贷款评估
你收到两份车贷方案:总还款额相同,但利率和期限不同。把两串还款流用同一个折现率算现值,就能判断哪个方案在今天的钱看来更便宜。
养老金一次性领取 vs. 按月领取
很多养老金计划在退休时提供两种选择:一次性领取或终身按月领取。按你个人的投资机会成本做折现率,算出按月领取流的现值,和一次性金额做比较即可。
租赁会计
在 IFRS 16 / ASC 842 下,承租方必须按未来租金现值确认使用权资产和租赁负债。如果租金有年度递增(增长年金),用增长年金公式;如果租金固定,用普通年金公式。
常见错误
- 利率和期数不一致。 按月付款却用年利率:要把利率除以 12,同时把年数乘以 12。
- 忘了
PV的符号约定。 当pmt为正时PV返回负数。要么对pmt取负(输入-A2),要么对整个结果取负(在PV前加负号)。不处理这个问题会导致"现值"显示为负数,造成困惑。 - 对期初付款用了普通年金公式。 如果付款实际发生在每期期初,普通年金公式会少折现一个周期、低估现值。把
PV的type设为1,或乘以 。 - 当 时使用增长年金公式。 分母变零。用特殊公式 或上文的
IF包裹写法。 - 折现率选错。 公式本身只是机械计算,判断在于利率的选择。利率取低了会高估现值,取高了会低估。务必在基准利率上下 1–2 个百分点做敏感性分析。
常见问题
年金现值和 PVIFA 有什么区别?
PVIFA 是每 1 元付款对应的现值——一个纯乘数。年金现值 = PVIFA × 付款金额。两者编码的是同一套数学,PVIFA 只是把付款金额提出来,方便复用。
能用 PV 函数算增长年金吗?
不能。Excel 的 PV 函数只处理等额付款(普通年金或期初年金)。增长年金必须手动输入公式,如上文所示。
如果付款按固定金额递增(而非百分比)怎么办?
那是等差递增年金(arithmetic gradient annuity),不是增长(等比)年金。Excel 没有单一的闭式快捷方式。最简单的做法是把每期付款列在一列中,用 =NPV(rate, range) 一次性折现整串现金流。
该用名义利率还是实际利率?
让利率和现金流匹配。如果付款是固定金额(名义值),用名义利率;如果付款以不变购买力(扣除通胀)表示,用实际利率。两者混用是常见的错误来源。
为什么期数翻倍、现值不会翻倍?
因为折现的存在。远期的付款今天几乎不值钱。年金现值随 增长但增速递减,上限永远不超过 (永续年金的价值)。这也是为什么把长期房贷的期限翻一倍,月供几乎不变。
折现率应该用多少?
没有统一答案。无风险现金流用相同期限的国债收益率;有风险的现金流加一个风险溢价——利率应反映付款可能无法如期到账的概率。在企业财务中,加权平均资本成本(WACC)是标准基准。务必做敏感性分析。
