用Excel计算个人工资所得税四套方案

互联网 | 编辑: 吴宏 2012-02-16 00:00:00转载 一键看全文

用Excel计算个人工资所得税的四套方案(2)

【方案一】——IF嵌套版:

B2=IF(AND(A2>0,A2<=1600),0,IF(AND(A2>1600,A2<=2100),ROUND((A2-1600)*0.05,2),IF(AND(A2>2100,A2<=3600),ROUND((A2-1600)*0.1-25,2),IF(AND(A2>3600,A2<=6600),ROUND((A2-1600)*0.15-125,2),IF(AND(A2>6600,A2<=21600),ROUND((A2-1600)*0.2-375,2),IF(AND(A2>21600,A2<=41600),ROUND((A2-1600)*0.25-1375,2),IF(AND(A2>41600,A2<=61600),ROUND((A2-1600)*0.3-3375,2),"")))))))

优点:简单明了,上手容易

缺点:if()函数嵌套最多只能七层,而个调税计征采用的是九级累进,所以这个公式适用的月收入上限是6万。

【方案二】——辅助数据版:

在E、F、G、H、I五列插入辅助列(如表2所示)。

B2=IF(A2<>"",ROUND(IF(A2>1600,A2-1600,0)*VLOOKUP(VLOOKUP(IF(A2>1600,A2-1600,0),$G$2:$G$10,1),$G$2:$I$10,2)-VLOOKUP(VLOOKUP(IF(A2>1600,A2-1600,0),$G$2:$G$10,1),$G$2:$I$10,3),2),"")

优点:克服IF()嵌套只能七层的缺陷,涵盖整个累进区间。累进算法资料独立,便于维护。公式也比较简洁,可读性强。

缺点:需要借助于辅助列,可移植性不强。

【方案三】——数组公式版:

B2:{=IF(A2<>"",ROUND(IF(AND(A2>0,A2<=1600),0,SUM(IF((A2-1600>={0,500,2000,5000,20000,40000,60000,80000,100000})+(A2-1600<{500,2000,5000,20000,40000,60000,80000,100000,100000000000})=2,(A2-1600)*{0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45}-{0,25,125,375,1375,3375,6375,10375,15375},0))),2),"")}

优点:同样克服了IF嵌套版不能涵盖全部九级累进区间的缺陷,且公式内数据相对容易维护,整个公式维护起来也比较简单。

缺点:数组公式的操作方法比较独特,每次修改后都要用“Ctrl+Shift+Enter”组合键加以识别,且可扩展性不如在后台运行的VBA代码。

P.S.:

“数组公式:数组公式对一组或多组值执行多重计算,并返回一个或多个结果。数组公式括于大括号({})中。按Ctrl+Shift+Enter可以输入数组公式。”

【方案四】——VBA代码版:

“工具”--》“宏”--》“VisualBasic编辑器”--》“插入”--》“模块”

=============复制以下代码至编辑窗口================

'计算个人收入调节税(IndividualIncomeAdjustmentTax)

Functioniiatax(x,y)

DimbasicnumAsInteger

DimdownnumAsVariant,upnumAsVariant,ratenumAsVariant,deductnumAsVariant

Ify=0Then

basicnum=1600'定义中国公民个税起征点

ElseIfy=1Then

basicnum=4800'定义外国公民个税起征点

Else:basicnum=Null

EndIf

downnum=Array(0,500,2000,5000,20000,40000,60000,80000,100000)'定义累进区间下限

upnum=Array(500,2000,5000,20000,40000,60000,80000,100000,100000000)'定义累进区间上限

ratenum=Array(0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45)'定义累进税率

deductnum=Array(0,25,125,375,1375,3375,6375,10375,15375)'定义累进速算扣除数

IfIsNumeric(x)=FalseThen

MsgBox("请检查计税工资是否为数值!")

EndIf

Ifx<0Then

MsgBox("计税工资为负,重新输入!")

EndIf

Ifx>=0Andx

iiatax=0

EndIf

Fori=0ToUBound(downnum)

Ifx-basicnum>downnum(i)Andx-basicnum<=upnum(i)Then

iiatax=Round((x-basicnum)*ratenum(i)-deductnum(i),2)

EndIf

Nexti

EndFunction

=============复制以上代码至编辑窗口================

P.S.:

1、iiatax(参数1,参数2),参数1引用计税工资,参数2用“0”表示中国公民的所得税起征点,用“1”表示外国公民的起征点。

2、使用时可以像使用函数一样,如“B2=iiatax(A2,0)”,或者“B2=iiatax(6500,1)”。

提示:试试键盘 “← →” 可以实现快速翻页 

总共 2 页< 上一页12
一键看全文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑