DDB()函数与双倍余额递减法2007-05-09 本站 问题的发现[例] 假定某企业某项固定资产的原值为400,000元,预计使用年限为5年,预计净残值率为4%,使用双倍余额递减法计算每年的折旧费用。解:利用中文Excel 97/2000 中的内置财务函数DDB(Cost,Salvage,Life,Period,Factor) 求解。1. 对DDB()函数作解释。
- Cost 为固定资产的原值
- Salvage 为预计净残值(=预计残值-预计清理费用)。系统默认值为0,即净残值为0
- Life 为预计使用年限
- Period 为第某年
- Factor 为余额递减倍数。系统默认值为2,即双倍余额递减。若其值为3时,就是三 倍余额递减
2. 使用函数 在上例中,可知:Cost=400000,Salvage=400000*40%,Life=5,Factor=2 (取默认值),为了一次计算出五年的折旧费用,使Period=A1(A1 单元格有数值1) 在单元格B2中输入:=DDB(400000,400000*4%,5,a2) ,并用公式填空的方法计算出1—5年的折旧费用 3. 发现问题 由于我们第一次使用该函数,为保险起见,我们做个试验——检验“累计折旧额=应计折旧总额”是否成立。在单元格B7中求出“累计折旧总额”:=SUM(B2:B6);在单元格B8 中求出“应计折旧总额”:=400000-400000*4%。我们发现:累计折旧额 (368896) <>应计折旧总额 (384000) ,有15104的差额,如图:
| A | B |
1 | 第某年 | DDB函数下的年折旧额(万元) |
2 | 1 | ¥160,000.00 |
3 | 2 | ¥96,000.00 |
4 | 3 | ¥57,600.00 |
5 | 4 | ¥34,560.00 |
6 | 5 | ¥20,736.00 |
7 | 累计折旧总额 | ¥368,896.00 |
8 | 应计折旧额 | ¥384,000.00 |
9 | 差额 | ¥15,104.00 |
问题的分析其实这个问题并不是 源于 Excel 的,这是涉到会计领域的一个重要问题。1. 递减折旧递减折旧是指固定资产使用年限内折旧费用逐渐递减的方法,双倍余额递减法是递减折旧的主要的一种方法,广泛用于会计实务中。A.递减折旧的理论依据
- 一般固定资产的服务贡献能力总是逐年递减的
- 操作效能或性能的递减会导致其他操作成本(如修理维护费用)的增加
- 以剩余服务价值的现值来表示的资产价值在前期降低较多,在后期则降低较少
- 因存在着资产陈旧的可能性,使得以后期间的收入具有不确定性
- 相对于直线法,使用前期可以少缴纳所得税,相当于从国家处取得无息贷款
- 相对于直线法,使用前期可以收回较多的投资,有利于归避资产的无形损耗
B.双倍余额递减法的理论操作方法为了在固定资产使用的前期多计一些折旧费用,后期少计一些折旧费用,使折旧费用逐年递减,采用2/预计使用年限 作为折旧率。具体为:第某年折旧费用=该年固定资产年初价值*折旧率(不考虑净残值)。从数字上看,该法的确完成了“前期多计一些费用,后期少计一些费用及折旧费用逐年递减”的要求,但该法天生的缺陷是无法在规定的年限计完所有的应计的折旧金额,这一点从数学上是可以论证的(这里从略)。不能在规定的年限计完所有的应计的折旧金额,该费用化的资本不能费用,进入企业损益的计算,这在会计上是讲不通的,违背了固定值产折旧原则和基本要求。2. 双倍余额递减法天然缺陷的弥补方案双倍余额递减法虽然存在这样的问题,但它确实是很好的递减折旧方案,除了使用年限总和法外,还没有更理想(从目的和繁简度角度)的递减折旧方案。为了保全双倍余额递减法,会计上产生了若干弥补的方案。
- 把预计使用年限中不能计提完毕的那一部分差额全都计在最后一年的折旧费用之中。(以下简称方案一,下同)
- 把预计使用年限中不能计提完毕的那一部分差额平均分配计入各年折旧费用之中。
- 使用双倍余额递减法计算折旧费用时,在预计使用年限中的最后两年,改用直线法计算折旧费用,即:最后两年的折旧费用=(最后第二年年初固定资产价值-预计净残值)/2。许多国家的会计制度都采用了这种方案。
- 在计算每年折旧费用之前,先比较采用直线法和双倍余额递减法计算的该年的折旧费用的高低。若直线法下的折旧费用低于双倍余额递减法计算的折旧费用,则仍使用双倍余额递减法计算折旧费用;若直线法下计算的折旧费用大于双倍余额递减法下的计算结果,则该年及以后各年都采用直线法计算每年的折旧费用。
| A | B | C | D | E | F |
1 | 第某年 | 方案一 | 方案二 | 方案三 | 方案四 | 直线法 |
2 | 1 | 10000.00 | 10536.87 | 10000.00 | 10000.00 | 5000.00 |
3 | 2 | 8000.00 | 8536.87 | 8000.00 | 8000.00 | 5000.00 |
4 | 3 | 6400.00 | 6936.87 | 6400.00 | 6400.00 | 5000.00 |
5 | 4 | 5120.00 | 5656.87 | 5120.00 | 5120.00 | 5000.00 |
6 | 5 | 4096.00 | 4632.87 | 4096.00 | 3413.33 | 5000.00 |
7 | 6 | 3276.80 | 3813.67 | 3276.80 | 3413.33 | 5000.00 |
8 | 7 | 2621.44 | 3158.31 | 2621.44 | 3413.33 | 5000.00 |
9 | 8 | 2097.15 | 2634.02 | 2097.15 | 3413.33 | 5000.00 |
10 | 9 | 1677.72 | 2214.59 | 4194.31 | 3413.33 | 5000.00 |
11 | 10 | 6710.89 | 1879.06 | 4194.30 | 3413.35 | 5000.00 |
12 | 累计折旧 | 50000.00 | 50000.00 | 50000.00 | 50000.00 | 50000.00 |
[例]某项固定资产的原始价值为50000元,预计使用年限是10年,采用以上四种方案计算1-10年的折旧费用。解:解题的过程我已在上表中列示。分析:在我们分析问题之前,先让我们把递减折旧法的概念及理论依据复习一下。从上表中不难发现方案一、方案三中的某些年的折旧费用大于它们各自前些年的折旧费用,如下图:

从上图我们清晰发现:方案一、方案三都存在后期折旧费用“翘尾巴”的图像。折旧费用应该逐年递减是递减折旧法的基本特征,也是递减折旧法立论的基础。固定资产的服务水平随着使用年数的增长而不断降低,它为企业提供的贡献也相应降低, 从收入与费用的配比角度看,计入损益的折旧费用也应逐年递减。方案二较好的解决了双倍余额递减法的问题,我个人认为这是四个方案中最好的一个。虽然,有人讲它采用平均分摊差额不合配比原则。但我认为,从重要性的角度看,平均摊入的费用其金额占每年应计折旧费用的比重并不大,且摊入后仍使每年的折旧费用平滑递减(从上图可知);再者所有的折旧方法都带有假设性质,只要能自圆其说就行。方案四也较好的解决了双倍余额递减法的问题,为了说明的方便,在列 F 中使了用直线法。当计算折旧费用时,我们发现传统双倍余额递减法下第五年的折旧费用=4096.00<直线法下的折旧费用=5000.00,于是从第五年开始改用直线法计算折旧费用,避免了折旧费用“翘尾巴”的局面,但在本例中竟然有6各个年头在使用直线法计算折旧费用,这还能叫“双倍余额递减法”吗?由于财务会计要受会计准则及会计制度的约束,我国既然规定采用方案三,我们在平时的会计核算时就应该无条件使用这种方案。我们也应注意到,并不是所有采用双倍余额递减法加最后两年改用直线法的案例都会出现折旧费用“翘尾巴”的现象,大多数情况下使用双倍余额递减法加最后两年改用直线法计算出的折旧费用是正常的。经验告诉我们,当预计使用年限较长、固定资产价值较小时会出现这种折旧费用“翘尾巴”的现象。然而,凡采用双倍余额递减法计算固定资产的折旧费用的企业或部门,一般都使用处于技术进步较快、无形损耗较大的领域,其资产的价值一般较大、使用年限一般较短。3. DDB()函数不能正确求解的原因DDB()函数在固定资产的使用年限中一律使用2/预计使用年限 作为折旧率,而没有考虑我们在上文论及的问题。DDB()函数不能正确求解,可能是微软公司的专家对会计学不太精通,只知其一,不知其二;也可能是对于双倍余额递减法存在问题的解决方案拿捏不定,于是 Excel 为大家留下了各自的思考空间。我更赞同后一种解释。问题的解决这儿我们只对双倍余额递减法加最后两年改用直线法进行处理。1. 思路无论何种原因造成DDB()函数不能正常服务,我们只有两种选择,其一是不用DDB()函数,其二是设法解决问题。我们不做“孱头”。即然是函数出了问题,那么我们就从函数入手——自定义一个函数。DDB() 函数在计算除最后两年折旧外的其他年份中,其计算值是正确的,因此,在计算第一年至(预计使用年限-3)时, DDB() 函数是可以被我们利用的。2. 在Excel 97自定义函数:双倍余额递减法(Cost,Life,Period,Salvage,Fy)
- 双倍余额递减法 为函数名
- Cost 为固定资产的原值
- Life 为预计使用年限
- Period 为第某年
- Salvage 为预计残值。系统默认值为0,即残值为0
- Fy 为预计清理费用。系统默认值为0,即清理费用为0
3. 双倍余额递减法()函数的功能按我国对双倍余额递减法的有关解释,编制能正确计算每年折旧费用的自定义函数每年折旧费用保留两位小数,并在最后一年调整尾差。4. 双倍余额递减法()函数的源代码Function 双倍余额递减法(ByVal Cost As Double, ByVal Life As Integer, ByVal Period As Integer,_ Optional Salvage As Double = 0, Optional Fy As Double = 0) As Double
Dim zmcost As Double, bqdb As Double, sumdb As Double, x As Double, y As Double
Dim life1 As Integer, n As Integer
sumdb = 0
life1 = Life - 2
If (Period < life1 Or Period = life1) Then
双倍余额递减法 = Application.Round(Application.DDB(Cost, , Life, Period), 2)
ElseIf (Period > life1 And Period <= Life) Then
For n = 1 To life1 Step 1
bqdb = Application.Round(Application.DDB(Cost, , Life, n), 2)
sumdb = sumdb + bqdb
Next n
zmcost = Cost - sumdb
bqdb = Application.Round((zmcost - Salvage + Fy) / 2, 2)
If Period = Life And ((bqdb * 2 + sumdb) <> (Cost - Salvage + Fy)) Then
双倍余额递减法 = Cost - Salvage + Fy - sumdb - bqdb
Else
双倍余额递减法 = bqdb
End If
End If
End Function5.对源代码的分析
- 代码是以Visual Basic语言编写的,因此阅读者要有该语言的基础。
- 代码对最后两年该为直线法的处理并不复杂:当Period<= (Life-2) 时,调用 Excel 97/2000 中的 DDB() 函数 ,即:Application.DDB();当 Life>life-2 时,先把 [1 , Life-3]的累计折旧费用之和(sumdb)计算出来,再计算最后两年的折旧费用=(Cost-Salvage-+Fy-sumdb)/2
- 代码的其他精力花在了保留两位小数和最后一年调整尾差上。
- 不足之处,函数不能直接返回¥#,##0.00格式。