利用伪代码分层代入法解决个人所得税问题
2014-11-12宁方旭
宁方旭
摘 要:在财务工资核算中,个人所得税的计算是一个重要的问题。我们利用Excel来生成应缴税额时不仅要理解现行个人所得税的计算方法,还要灵活运用If函数并将其多层嵌套后得出结果。大家往往被多层嵌套逻辑关系困扰,使得这个问题成为一个难点。作者利用伪代码分层代入法分解问题,使问题更易于理解和掌握。
关键词:Excel;If;伪代码;个人所得税
1 概述
工资核算是所有单位每个月都要做的事情,一般由单位人力专员计算按照公司文件规定和加班时间等计算出每名职工的税前应发工资部分,它包括基本工资、绩效工资、工龄工资和加班工资等。除了以上职工工资的收入部分,还有保险、公积金、考勤扣款等工资扣款部分,工资的收入部分减掉工资扣款部分就是职工的税前工资。根据国家相关规定自2011年9月1日起至今,每位职工每月工资超过3500元的部分需要按照税率表缴纳个人所得税,职工的税前工资减去个人所得税部分就是最终的实发工资。
在计算工资收入和扣款部分时,逻辑一般比较简单,使用公式可以方便的计算出结果。在得到税前工资并计算个人所得税时,需要根据七层超额累进个人所得税税率表(表1.1)进行计算。但是由于计算时需要用到If函数且计算层级比较多,在生成公式时往往会出现各种逻辑或书写格式上的错误。作者将对比普通的公式法和利用伪代码分层代入法解决个人所得税问题的不同,从而说明后一种方法更直观性、更易于理解。
2 解决方案
2.1 普通公式法
普通的方法就是指运用Excel中的If函数直接嵌套生成个人所得税结果。例如在工资表中M列是税前工资,自第3行开始是员工的工资信息,也就是说M3单元格开始是第一个员工的税前工资数据。我们需要在其右側的N列的N3单元格开始使用If函数构造出个人所得税的应缴税额公式。以N3单元格内的公式为例,具体公式如公式2-1所示:
=IF((M3-3500)<0,0,IF((M3-3500)<1500,(M3-3500)*0.03,IF((M3-3500)<4500,(M3-3500)*0.1-105,IF((M3-3500)<9000,(M3-3500)*0.2-555,IF((M3-3500)<35000,(M3-3500)*0.25-1005,IF((M3-3500)<55000,(M3-3500)*0.3-2755,IF((M3-3500)<80000,(M3-3500)*0.35-5505,(M3-3500)*0.45-13505))))))) (公式2-1)
不难看出,在这个公式中灵活运用了If函数的参数特性,将税前工资看作是一条直线坐标轴,子层函数值域均包含在其父层函数的[value_if_false]参数值域中,这样就省略了很多代码。但是这种省略对于初学函数者来说,很容易使他们陷入逻辑迷宫。而且长达120多字符的公式长度以及7层嵌套逻辑关系,会使他们在某一个单元格内一次性完成公式书写的难度剧增,甚至因为多次报错最终放弃此法。
2.2 伪代码分层代入法
如果牺牲部分代码长度将公式按照表1-1同样的层次逐层展开后再代入,就可以解决逻辑混乱和书写不清等问题。另外为方便初学者理解,我们在公式中使用了伪代码或一些表示值来说明一些关系。
我们将需缴纳的部分记作(M3-3500),对其的值域进行判断,在判断过程中对2-7层的条件使用And函数严格限制值域范围,虽然牺牲了代码长度但是更易于理解。对于1-6层的代码,都只对If函数中的[value_if_true]参数返回数值,而对[value_if_false]参数返回“需缴费”。依据以上解决方案的思路,我们将公式分成七个,每个公式代表表1-1中的一层,具体就如表2-1中所示。
最终利用子层的代码替换父层的“需缴费”信息,就能得到形如公式2-1的长公式,只是每层If的逻辑关系都是相对独立且完整的。
3 伪代码分层代入法优势
利用伪代码分层代入法解决问题,其代码长度并不是最优的,但是在解决问题的过程中利用伪代码分层公式对应表能够更清晰的体现出解题思路。在逐层代入的过程中,只要用子层的公式替换父层伪代码后就可以得到正确结果,不用担心在书写多层嵌套时格式错误。因为在每一层书写后参数都相对简单,很容易检查出错误并及时修改。
将此法用于日常的工作、教学中,不仅公式条理清晰而且文档易于理解,方便其他用户维护、改进,另外利用一些文本复制工具加以辅助后引用单元格内容,则能够快速的写出多层嵌套代码,这也适用于其他的多层嵌套关系问题的解决。
[参考文献]
[1]赖利君.Excel应用实例教程[M].人民邮电出版社.2011.8:73.
[2]姬昂.Excel在会计中的应用[M].人民邮电出版社.2011.8:225-227.