xygl 发表于 2014-9-4 19:56:56

求助:个人所得税计算代码

本帖最后由 通达林河水 于 2016-7-30 15:47 编辑 <br /><br />OA报表系统,做工资总表,需要自动生成个人所得税,求代码。
2011年9月1日后执行的新个人所得税的计算方法:免税额3500元。
应纳税额=( 工资-三险一金-3500)*税率-速算扣除数 调整后的7级超额累进税率如下:
1,全月应纳税额不超过1500元的,税率为3%,速算扣除数0;
2,全月应纳税额超过1500元至4500元的部分,税率为10%。速算扣除数105元;
3,全月应纳税额超过4500元至9000元的部分,税率为20%。速算扣除数555元;
4,全月应纳税额超过9000元至35000元的部分,税率为25%,速算扣除数1005元;
5,全月应纳税额超过35000元至55000元的部分,税率为30%,速算扣除数2755元;
6,全月应纳税额超过55000元至80000元的部分,税率为35%。速算扣除数5505元;
7,全月应纳税额超过80000的部分,税率为45%。速算扣除数13505元。

bxpcn 发表于 2014-9-4 20:51:10

本帖最后由 通达林河水 于 2016-7-30 15:47 编辑 <br /><br />EXCEL表格里,会不会实现?
在EXCEL中,用IF镶嵌这7种条件,测试OK,
然后导入BI报表,搞定。

xygl 发表于 2014-9-5 14:30:06

本帖最后由 通达林河水 于 2016-7-30 15:47 编辑 <br /><br />EXCEL表格里可以以实现,财务一直都在用,但是我导入BI报表后就报错。

xygl 发表于 2014-9-9 13:32:05

本帖最后由 通达林河水 于 2016-7-30 15:47 编辑 <br /><br />问题已解决,把公式分享给大家:
=IF(应税工资<=3500,0,IF(应税工资-3500<=1500,(应税工资-3500)*3%,IF(AND(应税工资-3500<=4500,应税工资-3500>1500),(应税工资-3500)*10%-105,IF(AND(应税工资-3500<=9000,应税工资-3500>4500),(应税工资-3500)*20%-555,IF(AND(应税工资-3500<=35000,应税工资-3500>9000),(应税工资-3500)*25%-1005,IF(AND(应税工资-3500<=55000,应税工资-3500>35000),(应税工资-3500)*30%-2755,IF(AND(应税工资-3500<80000,应税工资-3500>=55000),(应税工资-3500)*35%-5505,(应税工资-3500)*45%-13505)))))))

通达耿雪霞 发表于 2014-9-9 18:03:33

本帖最后由 通达林河水 于 2016-7-30 15:47 编辑 <br /><br />谢谢 xygl用户的回答。

lwty 发表于 2015-1-19 14:12:13

本帖最后由 通达林河水 于 2016-7-30 15:47 编辑 <br /><br />用4楼的这个公式,我来告诉通达什么叫优化:
第一步,对多次重复的不必要的内容进行精简,在条件比较的式子中多次出现的应税工资-3500 ,应该通过算术移项将 -3500 消去(计算税额需要的-3500在这里无法去掉):
=IF(应税工资<=3500,0,IF(应税工资<=5000,(应税工资-3500)*3%,IF(AND(应税工资<=8000,应税工资>5000),(应税工资-3500)*10%-105,IF(AND(应税工资<=12500,应税工资>8000),(应税工资-3500)*20%-555,IF(AND(应税工资<=38500,应税工资>12500),(应税工资-3500)*25%-1005,IF(AND(应税工资<=58500,应税工资>38500),(应税工资-3500)*30%-2755,IF(AND(应税工资<83500,应税工资>=58500),(应税工资-3500)*35%-5505,(应税工资-3500)*45%-13505)))))))
第二步,因为各档次之间是连续的,可以将判断的顺序适当改变,去掉不必要的and(),还可以将 <= 的判断 改成 > 判断进一步缩减表达式:
=IF(应税工资<=3500,0,IF(应税工资>83500,(应税工资-3500)*45%-13505,IF(应税工资>58500,(应税工资-3500)*35%-5505,IF(应税工资>38500,(应税工资-3500)*30%-2755,IF(应税工资>12500,(应税工资-3500)*25%-1005,IF(应税工资>8000,(应税工资-3500)*20%-555,IF(应税工资>5000,(应税工资-3500)*10%-105,(应税工资-3500)*3%)))))))
第三步,这步才是真正意义上的优化,前面两步只是对表达式的精简而已。因为excel对IF表达式的运算是从最外层嵌套开始,满足条件之后就返回对应结果并不再继续检查其他条件,因此,需要考虑日常工作中应税工资所在档次的频度排序,尽可能的将最多出现频率的档次放在更外层IF条件中。在第二步中单纯的将 <= 运算符换成 > 运算符并不能显著提升效率,只是可以减小文件的体积,对效率有理论上的好处。例,假如工资表中出现最多的工资在5000到8000之间,第二是8000到12500之间,第三是3500到5000之间,其他情况都很少,那么可以是这样:
=IF(应税工资<=8000,IF(应税工资>5000,(应税工资-3500)*10%-105,IF(应税工资>3500,(应税工资-3500)*3%,0)),IF(应税工资<=12500,(应税工资-3500)*20%-555,IF(应税工资<=38500,(应税工资-3500)*25%-1005,IF(应税工资>83500,(应税工资-3500)*45%-13505,IF(应税工资>58500,(应税工资-3500)*35%-5505,(应税工资-3500)*30%-2755)))))
页: [1]
查看完整版本: 求助:个人所得税计算代码