|
发表于 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))))) |
|