请教在Excel 工作表中用IF函数编辑个调税金公式有更简单的方法吗
各位老师:
请教在Excel 工作表中用IF函数编辑个调税金公式有更简单的方法吗?
我用以下方法才麻烦了:
=IF(AND(($AW:$AW-1200)>=0,($AW:$AW-1200)<500),($AW:$AW-1200)*5%,IF(AND(($AW:$AW-1200)>=500,($AW:$AW-1200)<2000),($AW:$AW-1200)*10%-25,IF(AND(($AW:$AW-1200)>=2000,($AW:$AW-1200)<5000),($AW:$AW-1200)*15%-125,IF(AND(($AW:$AW-1200)>=5000,($AW:$AW-1200)<20000),($AW:$AW-1200)*20%-375,IF(AND(($AW:$AW-1200)>=20000,($AW:$AW-1200)<=40000),($AW:$AW-1200)*25%-1375,0)))))
说明:$AW:$AW为税前工资所在的列。
以上公式的缺点一是太长,二是有局限性,它最多只能编到七层,即只能使用七个IF。
问题点数:20、回复次数:6Top
1 楼zara(Kyrie eleison)回复于 2005-08-01 09:10:51 得分 5
两个方法吧: 一个是写自定义函数来计算税率; 再就是建立一个列表, 表明各上限对应的税百分率和扣除值, 然后在格式中通过查找的方法来进行计算.
另外, 虽然 IF 公式可以嵌套到 7 层, 但是, 通过二分法可以表达的情形远不止 7 个的. 当然了, 这时公式的复杂程度也是比较可观的.Top
2 楼Yiqun_Zhao(蓝帆·雨轩 MS MVP)回复于 2005-08-01 13:01:41 得分 10
您可以设置一个税率表,比如下:
A B C
1 500 0.05 0
2 2,000 0.10 25
3 5,000 0.15 125
4 20,000 0.20 375
5 40,000 0.25 1375
6 60,000 0.30 ......
7 80,000 0.35 ......
8 100,000 0.40 ......
9 >100,000 0.45 ......
其中A列为缴交基数-1200,B列为税率,C列为个税速算数。。
使用函数查找到最接近的数据。判断大小,确定区间。[用Vlookup和一个If即可]
然后使用公式:
个税=(基数-1200)×区间上限税率-区间下限速算数
[本人对该公式不是很清楚,如果描述错误,请自己修正]Top
3 楼DawnPine(拂晓的松)回复于 2005-08-03 14:22:31 得分 0
版主果然厉害!
偶只会用VBA解决此类问题:
Function IncomeTax(Income As Currency) As Currency
Dim curTemp As Currency
curTemp = Income - 1200
If curTemp < 0 Then
IncomeTax = 0
ElseIf curTemp < 500 Then
IncomeTax = curTemp * 0.05
ElseIf curTemp < 2000 Then
IncomeTax = curTemp * 0.1 - 25
ElseIf curTemp < 5000 Then
IncomeTax = curTemp * 0.15 - 125
ElseIf curTemp < 20000 Then
IncomeTax = curTemp * 0.2 - 375
Else
IncomeTax = curTemp * 0.25 - 1375
End If
IncomeTax = Round(IncomeTax, 2)
End Function
把这段代码放在该EXCEL文件的模块里(或ThisWorkBook)里,就可以在该文件任意一个sheet里调用了,公式很简单:
=IncomeTax(12345.67)
即可.而且结果已经舍入到分, 楼主可根据自己的情况改为舍入到元或不舍入.
目前把参数写死在程序中, 如果需要也可改为参数化配置.Top
4 楼lina_p(htwq)回复于 2005-09-04 02:40:54 得分 0
各位老师好!
谢谢各位老师,按你们给的方法,我按下列公式设置后测试成功,只是又增加一个税率表,但比原来的好多了:
税前工资方法2=IF(AND(D:D="china",E:E>1200),(I:I*IF(I:I=0,0,LOOKUP(I:I,税率表!$A$1:$A$9,税率表!$B$1:$B$9))-INDEX(税率表!$C$2:$C$10,MATCH(I:I,税率表!$A$2:$A$10))),IF(AND(D:D<>"china",E:E>4000),(I:I*IF(I:I=0,0,LOOKUP(I:I,税率表!$A$1:$A$9,税率表!$B$1:$B$9))-INDEX(税率表!$C$2:$C$10,MATCH(I:I,税率表!$A$2:$A$10))),0))
zara老师,能抽时间教我你在8月1号说的"通过二分法可以表达的情形远不止 7 个的"方法吗?我有别的用途.谢谢!
早想上来找你们,但忙了一个月来不了.很想得到你们的赐教!在此先谢谢了,没想到有这么好的论坛,这么多的高手,太棒了,我真幸运.晚安!Top
5 楼zara(Kyrie eleison)回复于 2005-09-04 09:19:56 得分 5
一级 if 条件可以区分两种情况; 两级 if 条件可以区分四种情况 (三个 if), 即通过 if 从中间分隔条件区间: =if(条件2, if(条件1, 结果1, 结果2),if(条件3, 结果3, 结果4)) 这个公式有 3 个 if 函数, 但只嵌套了 2 级, 表示了 4 种可能. 通过同样的方法, 使用 n 级嵌套的话, 就可以表示 2^n 种条件. 这样的方法, 理解起来可能算还可以, 但真要写出公式来, 是非常郁闷的. 比如, 根据 A 列的数值在 B 列 分别列出对应的字符: 1->"A", 2->"B", 3->"C", ..., 则 B1 单元格的格式可以是:
=IF(A1<=8,IF(A1<=4,IF(A1<=2,IF(A1<2,"A","B"),IF(A1<4,"C","D")),IF(A1<=6,IF(A1<6,"E","F"),IF(A1<8,"G","H"))),IF(A1<=12,IF(A1<=10,IF(A1<10,"I","J"),IF(A1<12,"K","L")),IF(A1<=14,IF(A1<14,"M","N"),IF(A1<16,"O","P"))))
这里只使用了 4 级嵌套, 表示了 16 种情况: (当然了, 这个公式只是个示例, 没有实际使用价值的)
=IF(A1<=8,
IF(A1<=4,
IF(A1<=2,
IF(A1<2,"A","B"),
IF(A1<4,"C","D")),
IF(A1<=6,
IF(A1<6,"E","F"),
IF(A1<8,"G","H"))),
IF(A1<=12,
IF(A1<=10,
IF(A1<10,"I","J"),
IF(A1<12,"K","L")),
IF(A1<=14,
IF(A1<14,"M","N"),
IF(A1<16,"O","P"))))Top
6 楼lina_p(htwq)回复于 2005-09-08 13:16:06 得分 0
太好了,谢谢zara老师!
对不起大家,我在9月4日发的贴子中的第四行:"税前工资方法2"写错了,应改为"个调税核算方法2"
特此说明.Top




