Excel精英培训网

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

[已解决]将这个自定义函数改写用数组

[复制链接]
发表于 2017-4-4 08:45 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-4-4 17:48 编辑

将这个自定义函数改写用数组
最佳答案
2017-4-4 14:42
Function 应纳税(taxableincome As Variant)
Dim notaxbase As Integer
notaxbase = 1600
taxableincome = taxableincome - notaxbase
Dim taxchart As Variant
Dim i As Long
taxchart = [{0,0,0;500,5,0;2000,10,25;5000,15,125;20000,20,375;40000,25,1375;60000,30,3375;80000,35,6375;100000,40,10375}]
If taxableincome <= 0 Then
    应纳税 = 0
    Exit Function
End If
If taxableincome <= 100000 Then
    For i = LBound(taxchart, 1) To UBound(taxchart, 1) - 1
        If taxableincome > taxchart(i, 1) And taxableincome <= taxchart(i + 1, 1) Then
            应纳税 = taxableincome * taxchart(i + 1, 2) / 100 - taxchart(i + 1, 3)
            Exit Function
        End If
    Next
Else
    应纳税 = taxableincome * taxchart(UBound(taxchart, 1), 2) / 100 - taxchart(UBound(taxchart, 1), 3)
End If
End Function

将这个自定义函数改写用数组.rar

11.4 KB, 下载次数: 3

发表于 2017-4-4 09:27 | 显示全部楼层
回复

使用道具 举报

发表于 2017-4-4 11:45 | 显示全部楼层
简化多条件判断的一个通常做法是表驱动法,从表里面查找信息。
个税的话,可以将个税速算扣除表各档值放入数组如 arr(n,1)=第n档纳税额起点,arr(n,2)=第n档税额终点,arr(n,3)第n档税率,arr(n,4)第n档速算扣除额
好像并没有简化什么。
好处是个税政策变化的话,方便修改。

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-4-4 12:26 | 显示全部楼层
wenzili 发表于 2017-4-4 11:45
简化多条件判断的一个通常做法是表驱动法,从表里面查找信息。
个税的话,可以将个税速算扣除表各档值放入 ...

不懂请定代码了
回复

使用道具 举报

发表于 2017-4-4 14:42 | 显示全部楼层    本楼为最佳答案   
Function 应纳税(taxableincome As Variant)
Dim notaxbase As Integer
notaxbase = 1600
taxableincome = taxableincome - notaxbase
Dim taxchart As Variant
Dim i As Long
taxchart = [{0,0,0;500,5,0;2000,10,25;5000,15,125;20000,20,375;40000,25,1375;60000,30,3375;80000,35,6375;100000,40,10375}]
If taxableincome <= 0 Then
    应纳税 = 0
    Exit Function
End If
If taxableincome <= 100000 Then
    For i = LBound(taxchart, 1) To UBound(taxchart, 1) - 1
        If taxableincome > taxchart(i, 1) And taxableincome <= taxchart(i + 1, 1) Then
            应纳税 = taxableincome * taxchart(i + 1, 2) / 100 - taxchart(i + 1, 3)
            Exit Function
        End If
    Next
Else
    应纳税 = taxableincome * taxchart(UBound(taxchart, 1), 2) / 100 - taxchart(UBound(taxchart, 1), 3)
End If
End Function

评分

参与人数 1 +3 收起 理由
laoau138 + 3

查看全部评分

回复

使用道具 举报

发表于 2017-4-4 20:28 | 显示全部楼层
45的税率漏了,修改一下

Function 应纳税(taxableincome As Variant)
Dim notaxbase As Integer
notaxbase = 1600
taxableincome = taxableincome - notaxbase
Dim taxchart As Variant
Dim i As Long
taxchart = [{0,0,0;500,5,0;2000,10,25;5000,15,125;20000,20,375;40000,25,1375;60000,30,3375;80000,35,6375;100000,40,10375;200000,45,15375}]
If taxableincome <= 0 Then
    应纳税 = 0
    Exit Function
End If
If taxableincome <= taxchart(UBound(taxchart, 1) - 1, 1) Then
    For i = LBound(taxchart, 1) To UBound(taxchart, 1) - 1
        If taxableincome > taxchart(i, 1) And taxableincome <= taxchart(i + 1, 1) Then
            应纳税 = taxableincome * taxchart(i + 1, 2) / 100 - taxchart(i + 1, 3)
            Exit Function
        End If
    Next
Else
    应纳税 = taxableincome * taxchart(UBound(taxchart, 1), 2) / 100 - taxchart(UBound(taxchart, 1), 3)
End If
End Function

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-4-4 20:33 | 显示全部楼层
本帖最后由 wenzili 于 2017-4-4 20:34 编辑

表查询的好处是便于修改,如改为最新适用的所得税计算,只需修改两句:
notaxbase = 3500
taxchart = [{0,0,0;1500,3,0;4500,10,105;9000,20,555;35000,25,1005;55000,30,2755;80000,35,5505;100000,45,13505}]

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-27 07:42 , Processed in 0.312569 second(s), 19 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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