资产折旧与摊销的测算公式:解析DATEDIF函数的错误及提供解决方案和Excel测算模板

1. 问题与结论

在按月测算固定资产折旧或无形资产摊销时,常见需求并不是计算两个日期之间经过了多少个“完整月”,而是计算两个日期所在月份之间相隔了多少个自然月。

例如,某项固定资产于 2022 年 12 月 31 日开始使用,2023 年 6 月 30 日为本期期末。按照“当月增加、下月计提折旧”的口径,2023 年 1 月至 6 月共应计提 6 个月折旧。

但是,DATEDIF 函数计算的是两个日期之间的完整年、完整月或天数:

开始日期 结束日期 公式 结果
2022-12-31 2023-06-30 =DATEDIF(DATE(2022,12,31),DATE(2023,6,30),"M") 5

这里的 5 并不是 Excel 算错了,而是计算口径不匹配:

  • DATEDIF(...,"M") 回答的是“两个日期之间有多少个完整月”;
  • 折旧测算需要的是“从开始使用月份的次月到本期期末月份共有多少个月”。

因此,按自然月测算时,建议忽略日期中的“日”,使用以下公式计算月份差:

=(YEAR([结束日期])-YEAR([开始日期]))*12+MONTH([结束日期])-MONTH([开始日期])

代入上述日期,结果为:

(2023-2022)×12+6-12=6

在线文档示例: 点击查看

2. 为什么 DATEDIF 返回 5

微软将 DATEDIF 定义为计算两个日期之间的天数、月数或年数;其中参数 "M" 返回期间内的完整月数。

从 2022 年 12 月 31 日起算,到 2023 年 5 月 31 日已经经过 5 个完整月;到 2023 年 6 月 30 日时,因为尚未到达当月 31 日,所以不再增加一个完整月,结果仍为 5。

这也说明了为什么不宜用 DATEDIF(...,"M") 直接计算折旧或摊销月份:DATEDIF 会比较“日”,而按自然月计提的折旧或摊销通常只需要比较“年”和“月”。

微软还说明,DATEDIF 是为了兼容 Lotus 1-2-3 的旧工作簿而提供的函数,并提示它在某些场景中可能产生不准确的结果。微软明确列出的已知问题主要涉及 "MD" 参数。本文不把 5 归类为该已知问题,而将其视为完整月口径与自然月口径的差异。

3. 公式的适用前提

以下公式适用于同时满足这些条件的测算:

  1. 执行企业会计准则,按月计提;
  2. 采用年限平均法(直线法);
  3. 使用年限以“年”录入,乘以 12 后能够得到使用寿命月数;
  4. 不考虑资产减少、终止确认、减值、使用寿命变更、残值变更等特殊事项;
  5. [本期期初日期] 为本期第一个月份内的日期,[本期期末日期] 为本期最后一个月份内的日期。

其中:

  • 固定资产的 [开始使用日期],应理解为固定资产达到预定可使用状态并增加的日期;以下公式从次月开始计算折旧;
  • 无形资产的 [开始使用日期],应理解为无形资产可供使用的日期;以下公式假设可供使用当月计提一个整月摊销。

《企业会计准则第 4 号——固定资产》应用指南规定,固定资产应当按月计提折旧,当月增加的固定资产当月不计提、从下月起计提;当月减少的固定资产当月仍计提、从下月起不计提。《企业会计准则第 6 号——无形资产》第十七条规定,企业摊销无形资产应当自无形资产可供使用时起,至不再作为无形资产确认时止。

注意: 如果企业对无形资产可供使用首月或终止确认当月按实际天数摊销,以下“当月计一个整月”的公式并不适用,应按照企业的会计政策另行计算。

《【示例】固定资产(不含减值)年限平均法折旧测算公式》在线文档: 点击查看

4. 公式解析

下文用方括号表示字段,例如 [开始使用日期]。实际使用时,请根据工作簿结构替换为单元格引用、已定义名称或 Excel 表的结构化引用。

4.1. 月份差的基本公式

可以把每个自然月理解为一个连续的“月序号”:

=YEAR([日期])*12+MONTH([日期])

两个日期所在月份的差,就是两个“月序号”相减:

=(YEAR([结束日期])-YEAR([开始日期]))*12+MONTH([结束日期])-MONTH([开始日期])

该公式不读取日期中的“日”,所以 2022 年 12 月 1 日、12 月 30 日或 12 月 31 日的月序号完全相同。

4.2. 固定资产年限平均法

项目 公式
累计折旧月份 =MIN([使用年限]*12,MAX(0,(YEAR([本期期末日期])-YEAR([开始使用日期]))*12+MONTH([本期期末日期])-MONTH([开始使用日期])))
上期末累计折旧月份 =MIN([使用年限]*12,MAX(0,(YEAR(EOMONTH([本期期初日期],-1))-YEAR([开始使用日期]))*12+MONTH(EOMONTH([本期期初日期],-1))-MONTH([开始使用日期])))
本期折旧月份 =[累计折旧月份]-[上期末累计折旧月份]

公式中:

  • MAX(0,...) 防止本期期末早于开始使用月份时出现负数;
  • MIN([使用年限]*12,...) 防止累计折旧月份超过使用寿命;
  • EOMONTH([本期期初日期],-1) 取得本期期初日期的上月末,用于计算本期以前的累计折旧月份;
  • 本期折旧月份等于“本期期末累计月份-上期末累计月份”。

在不考虑减值和会计估计变更时,还可以据此测算金额:

月折旧额=([固定资产原价]-[预计净残值])/([使用年限]*12)
本期折旧额=[月折旧额]*[本期折旧月份]

4.3. 无形资产直线法

项目 公式
累计摊销月份 =IF([本期期末日期]<[开始使用日期],0,MIN([使用年限]*12,(YEAR([本期期末日期])-YEAR([开始使用日期]))*12+MONTH([本期期末日期])-MONTH([开始使用日期])+1))
上期末累计摊销月份 =IF(EOMONTH([本期期初日期],-1)<[开始使用日期],0,MIN([使用年限]*12,(YEAR(EOMONTH([本期期初日期],-1))-YEAR([开始使用日期]))*12+MONTH(EOMONTH([本期期初日期],-1))-MONTH([开始使用日期])+1))
本期摊销月份 =[累计摊销月份]-[上期末累计摊销月份]

无形资产公式中的 +1 表示把可供使用的当月计入摊销月份。前置的 IF 判断用于处理本期期末早于可供使用日期的情况,特别是两个日期处于同一月份但期末日期更早时,防止误计 1 个月。

例如,同样以 2022 年 12 月 31 日为开始使用日期、2023 年 6 月 30 日为期末:

测算对象 计提区间 累计月份
固定资产 2023 年 1 月至 6 月 6
无形资产 2022 年 12 月至 2023 年 6 月 7

因此,不能把同一个“月份差”结果同时直接用作固定资产折旧月份和无形资产摊销月份。

在不考虑减值和会计估计变更时,无形资产摊销额可按下式测算:

月摊销额=([无形资产成本]-[预计残值])/([使用年限]*12)
本期摊销额=[月摊销额]*[本期摊销月份]

使用寿命有限的无形资产,其残值通常视为零,但企业会计准则规定的例外情形除外。

4.4. 空值与异常值保护

Excel 会把空白日期用于日期函数计算,从而可能得到看似正常、实际错误的结果。正式用于底稿时,建议先判断必填字段是否为空。例如:

=IF(
  OR([使用年限]="",[开始使用日期]="",[本期期末日期]=""),
  "",
  [累计月份核心公式]
)

同时建议通过数据验证或复核规则检查:

  • 使用年限大于 0,且换算后的使用寿命月数为整数;
  • 开始使用日期、本期期初日期和本期期末日期均为真正的 Excel 日期,而不是文本;
  • 本期期初日期不晚于本期期末日期;
  • 存在资产减少、终止确认、减值或估计变更时,不直接套用本文公式。

5. 验证用例

完成公式后,可以至少使用以下边界情形进行验证:

场景 开始使用日期 本期期末日期 预期累计月份
固定资产跨年、月末日不同 2022-12-31 2023-06-30 6
固定资产本月开始使用 2023-06-01 2023-06-30 0
无形资产本月可供使用 2023-06-30 2023-06-30 1
无形资产尚未达到可供使用日期 2023-06-30 2023-06-01 0
期末早于开始使用月份 2023-07-01 2023-06-30 0
已超过 1 年使用寿命 2022-01-01 2023-06-30 不超过 12

6. 常见问题

6.1. 能否用日期相减后除以 30

不能。公历月份的天数不同,期间越长,累计误差越明显。

以 2012 年 12 月 31 日至 2023 年 6 月 30 日为例:

方法 公式 结果 说明
日期差除以 30 =(DATE(2023,6,30)-DATE(2012,12,31))/30 约 127.77 不是整数,四舍五入后为 128
自然月份差 =(YEAR(DATE(2023,6,30))-YEAR(DATE(2012,12,31)))*12+MONTH(DATE(2023,6,30))-MONTH(DATE(2012,12,31)) 126 固定资产从次月计提时的累计月份

在线文档示例: 点击查看

6.2. 如果仍想使用 DATEDIF,应该怎么写

先用 DATE 函数把开始日期和结束日期都转换为各自月份的第一天,再计算完整月数:

=DATEDIF(DATE(YEAR([开始日期]),MONTH([开始日期]),1),DATE(YEAR([结束日期]),MONTH([结束日期]),1),"M")

因为两个日期的“日”都是 1,DATEDIF 的结果就等于自然月份差。若用于本文假设下的无形资产摊销月份,再在结果后加 1,并使用 MIN、MAX 限制上下界。

与 DATEDIF(TEXT([开始日期],"YYYY-MM"),TEXT([结束日期],"YYYY-MM"),"M") 相比,DATE 写法直接构造真正的日期序列值,不依赖 Excel 对 "YYYY-MM" 文本的隐式日期解析,跨区域设置使用时更稳健。

6.3. DATEDIF 函数如何使用

详见:DATEDIF 函数用法。

7. 参考资料

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇