当我创建公式时,=YEARFRAC("1/1/2017","12/31/2017")
它返回 1。1/1/17 和 12/31/17 之间的一年。但是,当我创建时,=YEARFRAC("1/1/2017","06/30/2017")
我期望的是 0.5,即从 1/1/17 到 6/30/17 的六个月,但它返回的是 0.4972
然而,当再添加一天时,=YEARFRAC("1/1/2017","07/01/2017")
它现在返回 0.5。
我不太清楚这个函数到底是如何工作的。对于 [basis] 参数,即 YEARFRAC 中的第三个可选参数,哪个是最正确的选项?
谢谢。
答案1
非常好的问题,但令人惊讶的是,关于这个问题的资源并不多。
Office 帮助YEARFRAC()
提供了一些信息,但没有太多关于计算本身的细节。
该计算背后的系统被称为“日计数惯例“它主要用于金融领域计算利率和付款。
它有略微不同的变化,其中一些由的参数涵盖YEARFRAC()
。
由于没有经验,我无法为您解释该系统,但是只需创建一个小表,显示一年中每个月开始和结束的函数输出,它可能会帮助您选择最适合您需要的函数。
计算公式为
=ROUND(YEARFRAC($B$3,$B3,D$2),3)
答案2
您误解了该函数的输出。以下是该函数的描述:
计算整天数占一年的比例之间两个日期(start_date 和 end_date)。使用年份分数工作表功能可用于确定分配给特定期限的全年福利或义务的比例。
你能观察到这样一行吗:两个日期(开始日期和结束日期)之间的整天数即当您使用 30/06/2017 时,您没有考虑该日期,这会导致与预期不同的值。
答案3
由于您没有向函数提供第三个参数,因此 Excel 使用了默认设置“30/360 美国约定”。
关于 Excel 中 YEARFRAC 如何以 30/360 的形式工作(如果是每月 31 日)的具体细节,文档很少。我在下面找到了一个模糊的规范。
如果日期相等,则天数差为0。假设每个月有30天,一年的总天数为360,进行以下调整:
- 如果两个日期都是 31,则更改为 30
- 否则,如果 date1 的日期是 31,则将其更改为 30
- 否则,如果 date1 的日期是 30,而 date2 的日期是 31,则 date2 的日期将更改为 30(请注意,如果 date1 的日期 < 30,则 date2 的日期将保持为 31)
- 否则,如果两个日期都是各自年份的二月最后一天,则两个日期均更改为 30
- 否则,如果 date1 是二月的最后一天,则其月份日期将更改为 30
因此,在您的示例中,=YEARFRAC("1/1/2017","06/30/2017")
只计算了 179 天,因为它只计算了上半年。类似于计算 1 月 1 日至 1 月 2 日之间的天数,即使该时间段包含两天,也只计算 1 天。
这=YEARFRAC("1/1/2017","12/31/2017")
是不太直观的。因为 date1 是月份的 1 号,而 date2 是 31 号,所以 Excel 仍然将日期 2 视为 31 号,尽管 30/360 意味着每个月都有 30 天。一个有趣的结果是,这=YEARFRAC("12/31/2016","12/31/2017")
也给出了结果 1。