第六讲练习题:正反计算个税和工资(奖励积分3分)
本帖最后由 兰色幻想 于 2012-2-22 09:08 编辑本课的作业第二题是编写可以计算个税的自定义函数,那么本课练习题就在这个题目基础上增加一些难度,要求编写一个即可根据工资计算个税,又可以根据个税倒推出工资的自定义函数. WgeShui
提示1:
为了达到可以正反计算的目的,可以设置两个参数,第一个参数引用工资或个税,第二个参数设置一个开关,用户可以通过它来决定正算或倒算。即
Function Wgeshui(n,x)'这里x即是开关
IF x=1 then
由工资算个税的代码
elseIF x=2 then
由个税倒推工资的代码
End IF
End function
=WgeShui(a1,1) 可以根据A1的金额计算个税
=Wgeshui(a1,2) 可以根据A1的金额倒推出工资总额
提示2
IF判断可以设置多层。如:
IF 条件 then
IF 条件 then如果外层判断成立,再次进行里层判断
...
End IF ‘里层也需要有End IF和IF对应
elseif 条件 then
....
End if
提示3:倒算的方法
倒推时关键是税率和速算扣除数怎么确定,我们可以用税额和速算扣除数进行对比,在税率表中找到比税额大又最近的速算扣除数,那么这一层次就是所求税率和速算扣除数。
如500,我们在税率表中找到555这一档。555就是速算扣除数,20%就是税率,然后计算出工资总额即可
工资税额=(500+555)/0.2+3500=8775
答案直接跟贴上传,只有做对的才奖励,所以大家上交前一定要测试正确可用了,再提交答案。
谢谢校长提示,还要好好学习学习
E02:zjcat35Function Wgeshui(n, x)
Dim k As Long
If x = 1 Then
k = n - 3500
Select Case k
Case Is < 0
Wgeshui = 0
Case Is < 1500
Wgeshui = k * 0.03 - 0
Case Is < 4500
Wgeshui = k * 0.1 - 105
Case Is < 9000
Wgeshui = k * 0.2 - 555
Case Is < 35000
Wgeshui = k * 0.25 - 1005
Case Is < 55000
Wgeshui = k * 0.3 - 2755
Case Is < 80000
Wgeshui = k * 0.35 - 5505
Case Is >= 80000
Wgeshui = k * 0.45 - 13505
End Select
ElseIf x = 2 Then
Select Case n
Case Is > 22495
Wgeshui = (n + 13505) / 0.45 + 3500
Case Is > 13745
Wgeshui = (n + 5505) / 0.35 + 3500
Case Is > 7745
Wgeshui = (n + 2755) / 0.3 + 3500
Case Is > 1245
Wgeshui = (n + 1005) / 0.25 + 3500
Case Is > 345
Wgeshui = (n + 555) / 0.2 + 3500
Case Is > 45
Wgeshui = (n + 105) / 0.1 + 3500
Case Is > 0
Wgeshui = n / 0.03 + 3500
End Select
End If
End Function 本帖最后由 hrpotter 于 2012-2-16 11:09 编辑
C12:hrpotter Function Wgeshui(n, x) '这里x即是开关
If x = 1 Then
If n - 3500 < 0 Then
Wgeshui = 0
ElseIf n - 3500 < 1500 Then
Wgeshui = (n - 3500) * 0.03
ElseIf n - 3500 < 4500 Then
Wgeshui = (n - 3500) * 0.1 - 105
ElseIf n - 3500 < 9000 Then
Wgeshui = (n - 3500) * 0.2 - 555
ElseIf n - 3500 < 35000 Then
Wgeshui = (n - 3500) * 0.25 - 1005
ElseIf n - 3500 < 55000 Then
Wgeshui = (n - 3500) * 0.3 - 2755
ElseIf n - 3500 < 80000 Then
Wgeshui = (n - 3500) * 0.35 - 5505
Else
Wgeshui = (n - 3500) * 0.45 - 13505
End If
ElseIf x = 2 Then
If n <= 0 Then
Wgeshui = "小于等于3500"
ElseIf n < 45 Then
Wgeshui = n / 0.03 + 3500
ElseIf n < 345 Then
Wgeshui = (n + 105) / 0.1 + 3500
ElseIf n < 1245 Then
Wgeshui = (n + 555) / 0.2 + 3500
ElseIf n < 7745 Then
Wgeshui = (n + 1005) / 0.25 + 3500
ElseIf n < 13745 Then
Wgeshui = (n + 2755) / 0.3 + 3500
ElseIf n < 22495 Then
Wgeshui = (n + 5505) / 0.35 + 3500
Else
Wgeshui = (n + 13505) / 0.45 + 3500
End If
End If
End Function
vba入门21组 呱呱101826590
本帖最后由 yangrenchao 于 2012-2-20 18:19 编辑Function geshui(gg As Range) '用select case编写
Select Case gg.Value - 3500
Case Is > 80000
geshui = (gg.Value - 3500) * 0.45 - 13505
Case Is >= 55000
geshui = (gg.Value - 3500) * 0.35 - 5505
Case Is >= 35000
geshui = (gg.Value - 3500) * 0.3 - 2705
Case Is >= 9000
geshui = (gg.Value - 3500) * 0.25 - 1005
Case Is >= 4500
geshui = (gg.Value - 3500) * 0.2 - 555
Case Is >= 1500
geshui = (gg.Value - 3500) * 0.1 - 105
Case Is < 1500
geshui = 0
End Select
End Function
D组学委:windimi007Function Wgeshui(n#, Optional x As Byte = 1)
Dim ynssd&
If x = 1 Then
ynssd = n - 3500
Select Case ynssd
Case Is < -3500
Wgeshui = "工资输入有误!"
Case Is <= 0
Wgeshui = 0
Case Is <= 1500
Wgeshui = ynssd * 0.03
Case Is <= 4500
Wgeshui = ynssd * 0.1 - 105
Case Is <= 9000
Wgeshui = ynssd * 0.2 - 555
Case Is <= 35000
Wgeshui = ynssd * 0.25 - 1005
Case Is <= 55000
Wgeshui = ynssd * 0.3 - 2755
Case Is <= 80000
Wgeshui = ynssd * 0.35 - 5505
Case Else
Wgeshui = ynssd * 0.45 - 13505
End Select
ElseIf x = 2 Then
Select Case n
Case Is < 0
Wgeshui = "税额不可能小于0!"
Case 0
Wgeshui = "工资小于3500RMB!"
Case Is <= 45
Wgeshui = n / 0.03 + 3500
Case Is <= 345
Wgeshui = (n + 105) / 0.1 + 3500
Case Is <= 1245
Wgeshui = (n + 555) / 0.2 + 3500
Case Is <= 7745
Wgeshui = (n + 1005) / 0.25 + 3500
Case Is <= 13745
Wgeshui = (n + 2755) / 0.3 + 3500
Case Is <= 22495
Wgeshui = (n + 5505) / 0.35 + 3500
Case Else
Wgeshui = (n + 13505) / 0.45 + 3500
End Select
End If
End Function 首先根据作业中的数据 反推出 各个税率的最大值
然后再写代码
Function 正反算(金额, 算法)
Dim SY As Double, SS As Integer
If 算法 = "正算" Then
Select Case 金额 - 3500
Case Is <= 0
SY = 1
Case Is <= 1500
SY = 0.03
SS = 0
Case Is <= 4500
SY = 0.1
SS = 105
Case Is <= 9000
SY = 0.2
SS = 555
Case Is <= 35000
SY = 0.25
SS = 1005
Case Is <= 55000
SY = 0.3
SS = 2755
Case Is <= 8000
SY = 0.35
SS = 5505
Case Else
SY = 0.4
SS = 13505
End Select
正反算 = (金额 - 3500) * SY - SS
If SY = 1 Then 正反算 = 0
ElseIf 算法 = "反算" Then
Select Case 金额
Case 0 To 45
SY = 0.03
SS = 0
Case Is < 346
SY = 0.1
SS = 105
Case Is < 1246
SY = 0.2
SS = 155
Case Is < 7746
SY = 0.25
SS = 1005
Case Is < 13746
SY = 0.3
SS = 2755
Case Is < 18946
SY = 0.35
SS = 5505
Case Is > 18945
SY = 0.45
SS = 13505
End Select
正反算 = (金额 + SS) / SY + 3500
Else
正反算 = "参数二只能是“正算”和“反算”,注意添加上 英文 引号"
End If
End Function
本帖最后由 dsjohn 于 2012-2-17 13:25 编辑
Function WGeShui(n As Range, x)
Dim Rg As Long
Rg = (n - 3500)
If x = 1 Then
If Rg <= 0 Then
WGeShui = 0
ElseIf Rg <= 1500 Then
WGeShui = Rg * (3/ 100)
ElseIf Rg <= 4500 Then
WGeShui = Rg * (10 / 100) - 105
ElseIf Rg <= 9000 Then
WGeShui = Rg * (20 / 100) - 555
ElseIf Rg <= 35000 Then
WGeShui = Rg * (25 / 100) - 1005
ElseIf Rg <= 55000 Then
WGeShui = Rg * (30 / 100) - 2755
ElseIf Rg <= 80000 Then
WGeShui = Rg * (35 / 100) - 5505
ElseIf Rg > 80000 Then
WGeShui = Rg * (45 / 100) - 13505
End If
ElseIf x = 2 Then
If n <= 0 Then
WGeShui = "工资少于3500"
ElseIf n <= 45 Then
WGeShui = n / 0.03 + 3500
ElseIf n <= 345 Then
WGeShui = (n + 105) / 0.1 + 3500
ElseIf n <= 1245 Then
WGeShui = (n + 555) / 0.2 + 3500
ElseIf n <= 7745 Then
WGeShui = (n + 1005) / 0.25 + 3500
ElseIf n <= 13745 Then
WGeShui = (n + 2755) / 0.3 + 3500
ElseIf n <= 21270 Then
WGeShui = (n + 5505) / 0.35 + 3500
ElseIf n > 21270 Then
WGeShui = (n + 13505) / 0.45 + 3500
End If
End If
End Function
szhpbs 上交练习,谢谢老师批改
本帖最后由 sliang28 于 2012-2-16 21:58 编辑
C组 sliang28 提交答案
Function WGeShui(n As Double, x As Integer) As Variant
Dim NaShui As Double
Dim ns(10) As Double
Dim gz(10) As Double
If x = 1 Then
NaShui = n - 3500
ns(1) = 0
ns(2) = NaShui * 0.03 - 0
ns(3) = NaShui * 0.1 - 105
ns(4) = NaShui * 0.2 - 555
ns(5) = NaShui * 0.25 - 1005
ns(6) = NaShui * 0.3 - 2755
ns(7) = NaShui * 0.35 - 5505
ns(8) = NaShui * 0.45 - 13505
WGeShui = WorksheetFunction.Max(ns(1), ns(2), ns(3), ns(4), ns(5), ns(6), ns(7), ns(8))
ElseIf x = 2 Then
gz(1) = n / 0.03 + 3500
gz(2) = (n + 105) / 0.1 + 3500
gz(3) = (n + 555) / 0.2 + 3500
gz(4) = (n + 1005) / 0.25 + 3500
gz(5) = (n + 2755) / 0.3 + 3500
gz(6) = (n + 5505) / 0.35 + 3500
gz(7) = (n + 13505) / 0.45 + 3500
If n = 0 Then
WGeShui = "工资都不够纳税,丢人"
Else
WGeShui = WorksheetFunction.Min(gz(1), gz(2), gz(3), gz(4), gz(5), gz(6), gz(7))
End If
End If