课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
前两天做财务的好朋友咨询我如何计算个税,还顺带发来了如何计算税费的方法,具体方法如下图所示:
通过如上的分析,对于个税的计算方法已经充分掌握了,但在Excel中如何计算呢?总不能使用IF语句来计算吧。当然使用IF语句是可以的哦。来看看我朋友前财务写的代码,很震撼,公式如下(容我加一个代码段):
=IF(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4<=3500,0,IF(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4<=5000,(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-3500)*0.03,IF(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4<=8000,45+(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-5000)*0.1,IF(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4<=12500,45+300+(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-8000)*0.2))))
不得不承认,能写这么多IF语句嵌套,这个财务的确很厉害。毕竟还有很多人一写代码嵌套就晕乎了。
上面的代码计算出来的结果是正确的,不过缺点就是新增一个扣除项需要修改多处,很繁琐,那有没有什么办法能够优化呢?既然IF语句中那么多重复的单元格引用(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4),可以提取出来,然后配合数组即可计算出个税,公式如下(是不是简短许多?):
=ROUND(MAX((V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-3500)*5%*{0.6,2,4,5,6,7,9}-5*{0,21,111,201,551,1101,2701},0),2)
上面个税公式讲解:
(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-3500)是个税的应纳税所得额,这个就不多做解释了。
{0.6,2,4,5,6,7,9}是个数组,5%*{0.6,2,4,5,6,7,9}={0.03,0.1,0.2,0.25,0.3,0.35,0.45}是个税的税率公式。
5*{0,21,111,201,551,1101,2701}={0,105,555,1005,2755,5505,13505}是各级别的个税扣除额。
{0,21,111,201,551,1101,2701},这么来,是因个税的税率而来,知道纳税扣除额的累进计算公式,应该就能理解这个。实在不能理解,就认为是各级别的个税扣除额除25吧。
(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-3500)*5%*{0.6,2,4,5,6,7,9}-5*{0,21,111,201,551,1101,2701}是纳税额*各级个税税率-应扣额后的数字,如果税率对应的级别<=纳税额时,税率越大税额越大,符合所缴税款和所得相匹配的原理。如果税率对应的级别>纳税额时,税率越大税额越小,因为扣减了超额的扣除数,这样保证了,缴税数组里最大的那个一定是最符合相应税率的。
因为存在了纳税额<0的情况,即工资不满3500的,为避免出现税额为0,就在(V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-3500)*5%*{0.6,2,4,5,6,7,9}-5*{0,21,111,201,551,1101,2701}后添了一个“,0”的值保证计算税额的公式MAX((V4-W4-X4-Y4-Z4-AA4-O4-P4-Q4-R4-S4-T4-3500)*5%*{0.6,2,4,5,6,7,9}-5*{0,21,111,201,551,1101,2701},0)必定有个0值,在用MAX求最大时,出现的税额一定是符合税率的,并最小的数是0,不会出现负数。
最外层的Round函数只是为了让结果保留2位有效数字并进行四舍五入。
公式解释清楚了,接下来我们来演示一下公式计算过程,详见如下动态图:
如果需要经常计算个税,也可以编写为自定义函数,下次直接使用函数即可完成个税的计算,方便快捷,代码如下:
有了此代码,下次需要计算个税的时候,就非常方便了,请见如下演示:
原文链接:https://zhuanlan.zhihu.com/p/27591160