|
楼主 |
发表于 2008-12-3 13:45
|
显示全部楼层
<p style="TEXT-INDENT: 2em;"><b>【方案三】——数组公式版:</b></p><p style="TEXT-INDENT: 2em;">B2: {=IF(A2<>"",ROUND(IF(AND(A2>0,A2<=1600),0,SUM(IF((A2-1600>={0,500,2000,5000,20000,40000,60000,80000,100000})+(A2-1600<{500,2000,5000,20000,40000,60000,80000,100000,100000000000})=2,(A2-1600)*{0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45}-{0,25,125,375,1375,3375,6375,10375,15375},0))),2),"")} </p><p style="TEXT-INDENT: 2em;">优点:同样克服了 IF 嵌套版不能涵盖全部九级累进区间的缺陷,且公式内数据相对容易维护,整个公式维护起来也比较简单。 </p><p style="TEXT-INDENT: 2em;">缺点:数组公式的操作方法比较独特,每次修改后都要用“ Ctrl+Shift+Enter ”组合键加以识别,且可扩展性不如在后台运行的 VBA 代码。 </p><p style="TEXT-INDENT: 2em;"><b>.S. :</b><b></b></p><p style="TEXT-INDENT: 2em;">“数组公式:数组公式对一组或多组值执行多重计算,并返回一个或多个结果。数组公式括于大括号 ({ }) 中。按 Ctrl+Shift+Enter 可以输入数组公式。” </p><p style="TEXT-INDENT: 2em;"><b>【方案四】—— VBA 代码版:</b></p><p style="TEXT-INDENT: 2em;">“工具” -- 》“宏” -- 》“ Visual Basic 编辑器” -- 》“插入” -- 》“模块” </p><p style="TEXT-INDENT: 2em;">============= 复制以下代码至编辑窗口 ================ </p><p style="TEXT-INDENT: 2em;">'计算个人收入调节税 (Individual Income Adjustment Tax)</p><p style="TEXT-INDENT: 2em;">Function iiatax(x,y)</p><p style="TEXT-INDENT: 2em;">Dim basicnum As Integer</p><p style="TEXT-INDENT: 2em;">Dim downnum As Variant, upnum As Variant, ratenum As Variant, deductnum As Variant</p><p style="TEXT-INDENT: 2em;">If y = 0 Then</p><p style="TEXT-INDENT: 2em;">basicnum = 1600 '定义中国公民个税起征点</p><p style="TEXT-INDENT: 2em;">ElseIf y = 1 Then</p><p style="TEXT-INDENT: 2em;">basicnum = 4800 '定义外国公民个税起征点</p><p style="TEXT-INDENT: 2em;">Else: basicnum = Null</p><p style="TEXT-INDENT: 2em;">End If</p><p style="TEXT-INDENT: 2em;">downnum = Array(0, 500, 2000, 5000, 20000, 40000, 60000, 80000, 100000) '定义累进区间下限</p><p style="TEXT-INDENT: 2em;">upnum = Array(500, 2000, 5000, 20000, 40000, 60000, 80000, 100000, 100000000) '定义累进区间上限</p><p style="TEXT-INDENT: 2em;">ratenum = Array(0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45) '定义累进税率</p><p style="TEXT-INDENT: 2em;">deductnum = Array(0, 25, 125, 375, 1375, 3375, 6375, 10375, 15375) '定义累进速算扣除数</p><p style="TEXT-INDENT: 2em;">If IsNumeric(x) = False Then</p><p style="TEXT-INDENT: 2em;">MsgBox ("请检查计税工资是否为数值!")</p><p style="TEXT-INDENT: 2em;">End If</p><p style="TEXT-INDENT: 2em;">If x < 0 Then</p><p style="TEXT-INDENT: 2em;">MsgBox ("计税工资为负,重新输入!")</p><p style="TEXT-INDENT: 2em;">End If</p><p style="TEXT-INDENT: 2em;">If x >= 0 And x < basicnum Then</p><p style="TEXT-INDENT: 2em;">iiatax = 0</p><p style="TEXT-INDENT: 2em;">End If</p><p style="TEXT-INDENT: 2em;">For i = 0 To UBound(downnum)</p><p style="TEXT-INDENT: 2em;">If x - basicnum > downnum(i) And x - basicnum <= upnum(i) Then</p><p style="TEXT-INDENT: 2em;">iiatax = Round( ( x - basicnum ) * ratenum(i) - deductnum(i), 2)</p><p style="TEXT-INDENT: 2em;">End If</p><p style="TEXT-INDENT: 2em;">Next i</p><p style="TEXT-INDENT: 2em;">End Function</p><p style="TEXT-INDENT: 2em;">============= 复制以上代码至编辑窗口 ================ </p><p style="TEXT-INDENT: 2em;"><b>.S. :</b></p><p style="TEXT-INDENT: 2em;">1、iiatax(<i>参数1,</i><i>参数 2 </i>),<i>参数 </i><i>1 </i>引用计税工资,<i>参数 </i><i>2 </i>用“ 0 ” 表示中国公民的所得税起征点,用“ 1 ” 表示外国公民的起征点。 </p><p style="TEXT-INDENT: 2em;">2、使用时可以像使用函数一样,如“ B2=iiatax(A2,0) ”,或者“ B2=iiatax(6500,1) ”。</p> |
|