1、IF函数嵌套计算方法
由于新个税税率调整,等级也由九级调整到七级,起征点调整到3500元,所以,所以公式判断要比原来简单多了。例如:A1单元格为工薪收入(未扣除起征点3500元),则公式为:
=IF(A1>=83500,(A1-3500)*45%-13505,IF(A1>=58500,(A1-3500)*35%-5505,IF(A1>=38500,(A1-3500)*30%-2755,IF(A1>=12500,(A1-3500)*25%-1005,IF(A1>=8000,(A1-3500)*20%-555,IF(A1>=5000,(A1-3500)*10%-105,IF(A1>3500,(A1-3500)*3%,)))))))
变换公式:
=IF(A1<>"",ROUND(IF(AND(A1>0,A1<=3500),0,SUM(IF((A1-3500>={0;1500;4500;9000;35000;55000;80000})+(A1-3500<{1500;4500;9000;35000;55000;80000;10000000})=2,(A1-3500)*{3;10;20;25;30;35;45}%-{0;105;555;1005;2755;5505;13505},0))),2),)
抽水简化:
=IF(A1<>"",ROUND(IF(AND(A1>0,A1%<=35),0,SUM(IF((A1%-35>={0;15;45;90;350;550;800})+(A1%-35<{15;45;90;350;550;800;100000})=2,(A1-3500)*{3;10;20;25;30;35;45}%-{0;105;555;1005;2755;5505;13505},0))),2),)
由于IF使用太多,会让人绕晕,而且公式也很烦琐,容易出错,但初学者往往是从IF和VLOOKUP两个函数起步的。下面再给大家展示IF替代函数的方法,让大家真正领会到IF不可不用,不可多用的道理。
2、LOOKUP函数取代IF的运用
利用LOOKUP函数先计算出税率乘以应纳税所得额再减速算扣除数,公式:
=LOOKUP(A1,{0;3500;5000;8000;12500;38500;58500;83500},{0;3;10;20;25;30;35;45})*(A1%-35)-LOOKUP(A1,{0;3500;5000;8000;12500;38500;58500;83500},{0;0;105;555;1005;2755;5505;13505})
合并LOOKUP的第三参数项,得到:
=LOOKUP(A1,{0;3500;5000;8000;12500;38500;58500;83500},(A1-3500)*{0;3;10;20;25;30;35;45}%-{0;0;105;555;1005;2755;5505;13505})
抽水简化公式:
=LOOKUP(A1%,{0;7;10;16;25;77;117;167}*5,A1%*{0;3;10;20;25;30;35;45}-{0;21;91;251;376;761;1346;3016}*5)
再把5提取出来:
=LOOKUP(A1%,{0;7;10;16;25;77;117;167}*5,A1%*{0;0.6;2;4;5;6;7;9}-{0;21;91;251;376;761;1346;3016})*5
3、用TEXT取代IF再分段求和
将达到起征点的按段分段统计,公式:
=SUM(IF(A1-{3500;5000;8000;12500;38500;58500;83500}>0,(A1-{3500;5000;8000;12500;38500;58500;83500})*{3;7;10;5;5;5;10}%))
用TEXT条件参数取代IF,公式变换为:
=SUM(--TEXT((A1-{3500;5000;8000;12500;38500;58500;83500})*{3;7;10;5;5;5;10}%,"[<]\0"))
抽水简化:
=-RMB(SUM(-TEXT((A1%-{7;10;16;25;77;117;167}*5)*{3;7;10;5;5;5;10},"[<]!0")),2)
思路是利用前一百分比率包含后面的百分比率,只需补算新增比率的计算原理。例如大于3500的部分是3%,大于5000的是10%,但因大于3500的3%已包含了大于5000的3%,所以大于5000的部分只需补算新增的7%。
4、MAX函数取代IF的运用
按不同的税率和扣除数计算出税,取最大值
=MAX((A1-3500)*{3;10;20;25;30;35;45}%-{0;105;555;1005;2755;5505;13505},)
简化:
=5*MAX(A1*{0.6,2,4,5,6,7,9}%-{4,18,50,75,152,269,603}*5-1,)
保留2位小数:
=ROUND(5*MAX(A1*{0.6,2,4,5,6,7,9}%-{4,18,50,75,152,269,603}*5-1,),2)
'假设税前收入在A1
=MAX(A1*{0,0.03,0.1,0.2,0.25,0.3,0.35,0.45}-{0,105,455,1255,1880,3805,6730,15080})
5、INDEX函数取代IF的运用
按未扣除3500元前的收入总额比较,算出它的等级,然后与税率等级对应,得到公式:
=(A1-3500)*INDEX({0;3;10;20;25;30;35;45}%,SUM(N(A1%>={0;7;10;16;25;77;117;167}*5)))-INDEX({0;0;21;111;201;551;1101;2701}*5,SUM(N(A1%>={0;7;10;16;25;77;117;167}*5)))
将两段公式的第一参数合并,整理得到简化公式:
=INDEX(A1*{0;3;10;20;25;30;35;45}%-{0;21;91;251;376;761;1346;3016}*5,SUM(N(A1%>={0;7;10;16;25;77;117;167}*5)))
注释:=MAX((A1-3500)*{3;10;20;25;30;35;45}%-{0;105;555;1005;2755;5505;13505},)
简化后:=MAX(A1*{0,0.03,0.1,0.2,0.25,0.3,0.35,0.45}-{0,105,455,1255,1880,3805,6730,15080})
其中的-{105,455,1255,1880,3805,6730,15080}速算扣除数的演变过程是:
(A1-3500)*{3;10;20;25;30;35;45}%-{0;105;555;1005;2755;5505;13505}=A1*{3;10;20;25;30;35;45}%-3500*{3;10;20;25;30;35;45}%-{0;105;555;1005;2755;5505;13505}=A1*{3;10;20;25;30;35;45}%-(3500*{3;10;20;25;30;35;45}%+{0;105;555;1005;2755;5505;13505})=A1*{3;10;20;25;30;35;45}%-({105;350;700;875;1050;1225;1575}+{0;105;555;1005;2755;5505;13505})=A1*{3;10;20;25;30;35;45}%-{105,455,1255,1880,3805,6730,15080}即起征点3500分别乘以税率再加上对应的速算扣除数,就是这个数值。
{105,455,1255,1880,3805,6730,15080},进一步演变为:{21;91;251;376;761;1346;3016}*5,又演变为{4,18,50,75,152,269,603}*5+1,所以部分个税公式中的速算扣除数使用了这三种形式的数值,也就不足为奇了。
6、年终奖计算个税的方法
年终奖缴税采用老算法新税率
今后个人取得的年终奖,仍按照《国家税务总局关于调整个人取得全年一次性奖金等计算征收个人所得税方法问题的通知》(国税发【2005】9号)文件规定征税,但同时应采用最新减除费用标准、速算扣除数和税率,来计算缴纳个人所得税。
根据(国税发[2005]9号)第二条规定,纳税人取得全年一次性奖金,单独作为一个月工资、薪金所得计算纳税,并按以下计税办法,由扣缴义务人发放时代扣代缴:
(一)先将雇员当月内取得的全年一次性奖金,除以12个月,按其商数确定适用税率和速算扣除数。
如果在发放年终一次性奖金的当月,雇员当月工资薪金所得低于税法规定的费用扣除额,应将全年一次性奖金减除“雇员当月工资薪金所得与费用扣除额的差额”后的余额,按上述办法确定全年一次性奖金的适用税率和速算扣除数。
(二)将雇员个人当月内取得的全年一次性奖金,按本条第(一)项确定的适用税率和速算扣除数计算征税,计算公式如下:
1.如果雇员当月工资薪金所得高于(或等于)税法规定的费用扣除额的,适用公式为:
应纳税额=雇员当月取得全年一次性奖金×适用税率—速算扣除数
2.如果雇员当月工资薪金所得低于税法规定的费用扣除额的,适用公式为:
应纳税额=(雇员当月取得全年一次性奖金—雇员当月工资薪金所得与费用扣除额的差额)×适用税率—速算扣除数
上述全年一次性奖金性质的收入,包括年终双薪、年终加薪、实行年薪制和绩效工资办法的单位根据考核情况兑现的年薪和绩效工资。在一个纳税年度内,对每一个纳税人,全年一次性奖金计税办法只允许采用一次。
举个例子:韩先生在杭州一家公司工作,2011年12月3日取得工资收入3400元,当月又一次取得年终奖金24100元,其应缴纳多少个人所得税?
韩先生因当月工资不足3500元,可用其取得的奖金收入24100元补足其差额部分100元,剩余24000元除以12个月,得出月均收入2000元,其对应的税率和速算扣除数分别为10%和105元。应纳个人所得税额=(24100-100)×10%-105=2295元。"
根据规定,月薪达不到3500元的,要从年终奖中抵扣掉,所以,上述公式变通为:
=LOOKUP(("一次性年终奖"+("应发合计"-"免征额"-"养老金"-"失业保险"-"医疗保险"<0)*("应发合计"-"免征额"-"养老金"-"失业保险"-"医疗保险")%/60,{0;3;9;18;70;110;160},("一次性年终奖"+("应发合计"-"免征额"-"养老金"-"失业保险"-"医疗保险"<0)*("应发合计"-"免征额"-"养老金"-"失业保险"-"医疗保险")*{3;10;20;25;30;35;45}%-{0;21;111;201;551;1101;2701}*5)
7、已知税后工资或个税,倒推税前工资的方法
1)、假定G6单元格输入税后工资5405元,推算税前工资,公式:
=MAX((G6-3500-5*{0,0,21,111,201,551,1101,2701})/(1-5%*{0,0.6,2,4,5,6,7,9})+3500)
=MAX((G6-3500-5*{0,21,111,201,551,1101,2701})/(1-5%*{0.6,2,4,5,6,7,9})+3500,G6)
结果是5,500.00元
2)、假定G10单元格输入个税95元,推算税前工资,公式:
=MIN(3500+(G10+5*{0,21,111,201,551,1101,2701})/(5%*{0.6,2,4,5,6,7,9}))
=MIN((G10+{0;105;555;1005;2755;5505;13505})/{0.03;0.1;0.2;0.25;0.3;0.35;0.45})+3500
简化公式:
=MIN((个税+5*{21,91,251,376,761,1346,3016})/{3,10,20,25,30,35,45}%)
8、已知税后工资,倒推个税的方法,其计算公式:
=MAX((A1-3500-5*{0,21,111,201,551,1101,2701})/(1-5%*{0.6,2,4,5,6,7,9})+3500-A1,)
至此目前个税计算的常见方法已介绍给大家。
三、已知税后工资反推税前工资公式推导过程
税前工资-个税=税后工资
税前工资=税后工资+个税
个税=(税前工资-五险一金-个税起征点3500)*税率-速算扣除数,将个税代入上式
税前工资=税后工资+(税前工资-五险一金-个税起征点3500)*税率-速算扣除数
税前工资-税前工资*税率=税后工资-(五险一金+个税起征点3500)*税率-速算扣除数
税前工资(1-税率)=税后工资-(五险一金+个税起征点3500)*税率-速算扣除数
税前工资=税后工资/(1-税率)-(五险一金+个税起征点3500)*税率/(1-税率)-速算扣除数/(1-税率)……公式1
现在需要对(五险一金+个税起征点3500)*税率/(1-税率)进行加减一个数处理,即
(五险一金+个税起征点3500)*税率/(1-税率)=(五险一金+个税起征点3500)*税率/(1-税率)+(五险一金+个税起征点3500)-(五险一金+个税起征点3500)
=((五险一金+个税起征点3500)*税率+(五险一金+个税起征点3500)*(1-税率))/(1-税率)-(五险一金+个税起征点3500)=((五险一金+个税起征点3500)*税率+(五险一金+个税起征点3500)-(五险一金+个税起征点3500)*税率)/(1-税率)-(五险一金+个税起征点3500)
因此得到:
(五险一金+个税起征点3500)*税率/(1-税率)=(五险一金+个税起征点3500)/(1-税率)-(五险一金+个税起征点3500)……公式2
将公式2代入公式1
税前工资=税后工资/(1-税率)-((五险一金+个税起征点3500)/(1-税率)-(五险一金+个税起征点3500))-速算扣除数/(1-税率)=税后工资/(1-税率)-(五险一金+个税起征点3500)/(1-税率)-速算扣除数/(1-税率)+(五险一金+个税起征点3500)
即
税前工资=(税后工资-(五险一金+个税起征点3500)-速算扣除数)/(1-税率)+(五险一金+个税起征点3500)……公式3
将速算扣除数和税率的值代入公式3
其中:速算扣除数={0,0,105,555,1005,2755,5505,13505},税率={0,0.03,0.1,0.2,0.25,0.3,0.35,0.45}
完整公式为:
税前工资=MAX((税后工资-五险一金-个税起征点3500-{0,0,105,555,1005,2755,5505,13505})/(1-{0,0.03,0.1,0.2,0.25,0.3,0.35,0.45})+五险一金+个税起征点3500)
'对于文本数字,参数n前面用Val()函数处理一下即可。Val处理结果仍为数值,对于字符串,则处理结果=0
Function ks(n)
'已知税前工资求个税
If n > 3500 Then n = n - 3500 Else ks = 0: Exit Function '免税起征抵扣3500元
m = Array(0, 1500, 4500, 9000, 35000, 55000, 80000) '扣除3500元以后的收入级差
s = Array(0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45) '收入级差对应的税率
t = Array(0, 45, 345, 1245, 7745, 13745, 22495) '收入级差对应累计扣税速算数
,即收入级差*税率-速算扣除数
't={0,1500,4500,9000,35000,55000,80000}*{0.03,0.1,0.2,0.25,0.3,0.35,0.45}-{0,105,555,1005,2755,5505,13505}
For i = 6 To 0 Step -1
If n > m(i) Then ks = t(i) + (n - m(i)) * s(i): Exit For '找到对应级差以后一步计算即可得到结果。
Next
End Function
'对指定区域进行一次性计算个税时,下面这个代码效率最高:
Sub test()
'已知税前工资求个税
r = Array(0, 1500, 4500, 9000, 35000, 55000, 80000) '扣除3500元以后的收入级差
s = Array(0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45) '收入级差对应的税率
t = Array(0, 45, 345, 1245, 7745, 13745, 22495) '收入级差对应累计扣税速算数,
即收入级差*税率-速算扣除数
't={0,1500,4500,9000,35000,55000,80000}*{0.03,0.1,0.2,0.25,0.3,0.35,0.45}-{0,105,555,1005,2755,5505,13505}
m = [e65536].End(3).Row - 3
ar = [e4].Resize(m) 'E4开始直到E列最后1行作为收入扣税的计算对象
For i = 1 To m '遍历各行
n = ar(i, 1) '读取收入n
If n > 3500 Then '超3500元时
n= n - 3500 '扣除免征额
For j = 6 To 0 Step -1
If n > r(j) Then ar(i, 1) = (n - r(j)) * s(j) + t(j): Exit For '一步计算到位
Next
Else '不超3500元时免征
ar(i, 1) = 0
End If
Next
[f4].Resize(m) = ar '在F4列输出扣税计算结果。
End Sub
Sub test1() '已知税后工资反推个税
r = Array(0, 105, 555, 1005, 2755, 5505, 13505) '速算扣除数的级差
s = Array(0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45) '收入级差对应的税率
m = [ai65536].End(3).Row - 4 '个税数据
ar = [ai5].Resize(m) 'E4开始直到E列最后1行作为个税的计算对象
ReDim cr(0 To 7, 1 To 1)
For i = 1 To m '遍历各行
n = VBA.Val(ar(i, 1)) - 3500 '读取税后工资n
For j = 6 To 0 Step -1
cr(j, 1) = ((n - r(j)) / (1 - s(j)) + 3500 - Val(ar(i, 1)))
Next
ar(i, 1) = Application.Max(cr, 0)
Next
[ak5].Resize(m) = ar '在AK5列输出个税工资计算结果。
End Sub
Sub test2() '已知税后工资反推税前工资
r = Array(0, 0, 105, 555, 1005, 2755, 5505, 13505) '速算扣除数的级差
s = Array(0, 0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45) '收入级差对应的税率
m = [ai65536].End(3).Row - 4 '个税数据
ar = [ai5].Resize(m) 'E4开始直到E列最后1行作为税前收入的计算对象
ReDim cr(0 To 7, 1 To 1)
For i = 1 To m '遍历各行
n = VBA.Val(ar(i, 1)) - 3500 '读取税后工资n
For j = 7 To 0 Step -1
cr(j, 1) = ((n - r(j)) / (1 - s(j)) + 3500)
Next
ar(i, 1) = Application.Max(cr)
Next
[ak5].Resize(m) = ar '在AK5列输出税前工资计算结果。
End Sub
Sub test3() '已知个税反推税前工资
r = Array(105, 455, 1255, 1880, 3805, 6730, 15080) '起征点3500分别乘以税率再加上对应的速算扣除数的级差
s = Array(0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45) '收入级差对应的税率
t = Array(0, 45, 345, 1245, 7745, 13745, 22495) '收入级差对应累计扣税速算数,即收入级差*税率-速算扣除数
't={0,1500,4500,9000,35000,55000,80000}*{0.03,0.1,0.2,0.25,0.3,0.35,0.45}-{0,105,555,1005,2755,5505,13505}
m = [ah65536].End(3).Row - 4 '个税数据
ar = [ah5].Resize(m) 'E4开始直到E列最后1行作为税前收入的计算对象
For i = 1 To m '遍历各行
n = VBA.Val(ar(i, 1)) '读取个税n
If n > 0 Then '纳税时
For j = 6 To 0 Step -1
If n > t(j) Then ar(i, 1) = (ar(i, 1) + r(j)) / s(j): Exit For '一步计算到位
Next
Else '不纳税时,不反算税前工资
ar(i, 1) = 0
End If
Next
[ap5].Resize(m) = ar '在AP5列输出税前工资计算结果。
End Sub