Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 38396|回复: 63

[练习题] 第六讲练习题:正反计算个税和工资(奖励积分3分)

  [复制链接]
发表于 2012-2-16 10:07 | 显示全部楼层 |阅读模式
本帖最后由 兰色幻想 于 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

              答案直接跟贴上传,只有做对的才奖励,所以大家上交前一定要测试正确可用了,再提交答案。

评分

参与人数 2 +13 收起 理由
wenchduan + 10 很给力!
jiahua1010 + 3 很给力!

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-2-16 10:33 | 显示全部楼层
回复

使用道具 举报

发表于 2012-2-16 10:45 | 显示全部楼层
E02:zjcat35
  1. Function Wgeshui(n, x)
  2.   Dim k As Long
  3.     If x = 1 Then
  4.       k = n - 3500
  5.   Select Case k
  6.     Case Is < 0
  7.       Wgeshui = 0
  8.     Case Is < 1500
  9.       Wgeshui = k * 0.03 - 0
  10.     Case Is < 4500
  11.       Wgeshui = k * 0.1 - 105
  12.     Case Is < 9000
  13.       Wgeshui = k * 0.2 - 555
  14.     Case Is < 35000
  15.       Wgeshui = k * 0.25 - 1005
  16.     Case Is < 55000
  17.       Wgeshui = k * 0.3 - 2755
  18.     Case Is < 80000
  19.       Wgeshui = k * 0.35 - 5505
  20.     Case Is >= 80000
  21.      Wgeshui = k * 0.45 - 13505
  22.   End Select
  23.     ElseIf x = 2 Then
  24.       Select Case n
  25.         Case Is > 22495
  26.           Wgeshui = (n + 13505) / 0.45 + 3500
  27.         Case Is > 13745
  28.           Wgeshui = (n + 5505) / 0.35 + 3500
  29.         Case Is > 7745
  30.           Wgeshui = (n + 2755) / 0.3 + 3500
  31.         Case Is > 1245
  32.           Wgeshui = (n + 1005) / 0.25 + 3500
  33.         Case Is > 345
  34.           Wgeshui = (n + 555) / 0.2 + 3500
  35.         Case Is > 45
  36.           Wgeshui = (n + 105) / 0.1 + 3500
  37.         Case Is > 0
  38.           Wgeshui = n / 0.03 + 3500
  39.       End Select
  40.     End If
  41. End Function
复制代码

点评

答案正确,加3积分  发表于 2012-2-21 16:22

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-2-16 11:08 | 显示全部楼层
本帖最后由 hrpotter 于 2012-2-16 11:09 编辑

C12:hrpotter
  1. Function Wgeshui(n, x)    '这里x即是开关
  2.     If x = 1 Then
  3.         If n - 3500 < 0 Then
  4.             Wgeshui = 0
  5.         ElseIf n - 3500 < 1500 Then
  6.             Wgeshui = (n - 3500) * 0.03
  7.         ElseIf n - 3500 < 4500 Then
  8.             Wgeshui = (n - 3500) * 0.1 - 105
  9.         ElseIf n - 3500 < 9000 Then
  10.             Wgeshui = (n - 3500) * 0.2 - 555
  11.         ElseIf n - 3500 < 35000 Then
  12.             Wgeshui = (n - 3500) * 0.25 - 1005
  13.         ElseIf n - 3500 < 55000 Then
  14.             Wgeshui = (n - 3500) * 0.3 - 2755
  15.         ElseIf n - 3500 < 80000 Then
  16.             Wgeshui = (n - 3500) * 0.35 - 5505
  17.         Else
  18.             Wgeshui = (n - 3500) * 0.45 - 13505
  19.         End If
  20.     ElseIf x = 2 Then
  21.         If n <= 0 Then
  22.             Wgeshui = "小于等于3500"
  23.         ElseIf n < 45 Then
  24.             Wgeshui = n / 0.03 + 3500
  25.         ElseIf n < 345 Then
  26.             Wgeshui = (n + 105) / 0.1 + 3500
  27.         ElseIf n < 1245 Then
  28.             Wgeshui = (n + 555) / 0.2 + 3500
  29.         ElseIf n < 7745 Then
  30.             Wgeshui = (n + 1005) / 0.25 + 3500
  31.         ElseIf n < 13745 Then
  32.             Wgeshui = (n + 2755) / 0.3 + 3500
  33.         ElseIf n < 22495 Then
  34.             Wgeshui = (n + 5505) / 0.35 + 3500
  35.         Else
  36.             Wgeshui = (n + 13505) / 0.45 + 3500
  37.         End If
  38.     End If
  39. End Function
复制代码

点评

答案正确,加3积分  发表于 2012-2-21 16:22

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-2-16 11:47 | 显示全部楼层

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

点评

这是是交练习的地方,作业应交到作业贴  发表于 2012-2-21 16:04

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-2-16 12:20 | 显示全部楼层
D组学委:windimi007
  1. Function Wgeshui(n#, Optional x As Byte = 1)
  2.     Dim ynssd&
  3.     If x = 1 Then
  4.         ynssd = n - 3500
  5.         Select Case ynssd
  6.         Case Is < -3500
  7.             Wgeshui = "工资输入有误!"
  8.         Case Is <= 0
  9.             Wgeshui = 0
  10.         Case Is <= 1500
  11.             Wgeshui = ynssd * 0.03
  12.         Case Is <= 4500
  13.             Wgeshui = ynssd * 0.1 - 105
  14.         Case Is <= 9000
  15.             Wgeshui = ynssd * 0.2 - 555
  16.         Case Is <= 35000
  17.             Wgeshui = ynssd * 0.25 - 1005
  18.         Case Is <= 55000
  19.             Wgeshui = ynssd * 0.3 - 2755
  20.         Case Is <= 80000
  21.             Wgeshui = ynssd * 0.35 - 5505
  22.         Case Else
  23.             Wgeshui = ynssd * 0.45 - 13505
  24.         End Select
  25.     ElseIf x = 2 Then
  26.         Select Case n
  27.         Case Is < 0
  28.             Wgeshui = "税额不可能小于0!"
  29.         Case 0
  30.             Wgeshui = "工资小于3500RMB!"
  31.         Case Is <= 45
  32.             Wgeshui = n / 0.03 + 3500
  33.         Case Is <= 345
  34.             Wgeshui = (n + 105) / 0.1 + 3500
  35.         Case Is <= 1245
  36.             Wgeshui = (n + 555) / 0.2 + 3500
  37.         Case Is <= 7745
  38.             Wgeshui = (n + 1005) / 0.25 + 3500
  39.         Case Is <= 13745
  40.             Wgeshui = (n + 2755) / 0.3 + 3500
  41.         Case Is <= 22495
  42.             Wgeshui = (n + 5505) / 0.35 + 3500
  43.         Case Else
  44.             Wgeshui = (n + 13505) / 0.45 + 3500
  45.         End Select
  46.     End If
  47. End Function
复制代码

点评

答案正确,加3积分  发表于 2012-2-21 16:22

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-2-16 12:41 | 显示全部楼层
首先根据作业中的数据 反推出 各个税率的最大值

然后再写代码


  1. Function 正反算(金额, 算法)
  2.   Dim SY As Double, SS As Integer
  3.   If 算法 = "正算" Then
  4.     Select Case 金额 - 3500
  5.     Case Is <= 0
  6.       SY = 1
  7.     Case Is <= 1500
  8.       SY = 0.03
  9.       SS = 0
  10.     Case Is <= 4500
  11.       SY = 0.1
  12.       SS = 105
  13.     Case Is <= 9000
  14.       SY = 0.2
  15.       SS = 555
  16.     Case Is <= 35000
  17.       SY = 0.25
  18.       SS = 1005
  19.     Case Is <= 55000
  20.       SY = 0.3
  21.       SS = 2755
  22.     Case Is <= 8000
  23.       SY = 0.35
  24.       SS = 5505
  25.     Case Else
  26.       SY = 0.4
  27.       SS = 13505
  28.     End Select
  29.     正反算 = (金额 - 3500) * SY - SS
  30.     If SY = 1 Then 正反算 = 0
  31.   ElseIf 算法 = "反算" Then
  32.     Select Case 金额
  33.       Case 0 To 45
  34.         SY = 0.03
  35.         SS = 0
  36.       Case Is < 346
  37.         SY = 0.1
  38.         SS = 105
  39.       Case Is < 1246
  40.         SY = 0.2
  41.         SS = 155
  42.       Case Is < 7746
  43.         SY = 0.25
  44.         SS = 1005
  45.       Case Is < 13746
  46.         SY = 0.3
  47.         SS = 2755
  48.       Case Is < 18946
  49.         SY = 0.35
  50.         SS = 5505
  51.       Case Is > 18945
  52.         SY = 0.45
  53.         SS = 13505
  54.     End Select
  55.     正反算 = (金额 + SS) / SY + 3500
  56.   Else
  57.     正反算 = "参数二只能是“正算”和“反算”,注意添加上 英文 引号"
  58.   End If
  59. End Function
复制代码

点评

计算结果返回错误值  发表于 2012-2-21 16:19
回复

使用道具 举报

发表于 2012-2-16 13:06 | 显示全部楼层
本帖最后由 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

点评

答案正确,加3积分  发表于 2012-2-21 16:22

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2012-2-16 13:20 | 显示全部楼层
szhpbs 上交练习,谢谢老师批改 个税.rar (7.13 KB, 下载次数: 20)

点评

工资为300时,个税为负96  发表于 2012-2-21 16:21
回复

使用道具 举报

发表于 2012-2-16 13:31 | 显示全部楼层
本帖最后由 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

点评

答案正确,加3积分  发表于 2012-2-21 16:21

评分

参与人数 1金币 +10 收起 理由
兰色幻想 + 10 赞一个!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 13:23 , Processed in 0.904097 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表