2014年 第 5 期
总第 681 期
财会月刊(上)
会计电算化
基于Excel VBA的年终奖纳税筹划批量求解

作  者
陈国栋(博士)

作者单位
(华北水利水电大学管理与经济学院 郑州 450046)

摘  要

      【摘要】在遵守国家税法的条件下,当第12个月工资和年终奖之和一定时,可以对第12个月工资和年终奖组合进行优化从而使员工纳税总额最小。本文用Excel规划求解的演化计算方法来优化第12个月工资和年终奖组合,并且给出了用Excel VBA进行批量纳税筹划的计算方法,然后结合实例验证了这个方法的可行性与准确性。
【关键词】年终奖   优化   Excel VBA   纳税筹划

由于年终奖纳税筹划问题具有极强的现实意义,关系到广大工薪阶层的切身利益,所以这个问题引起了广大学者的关注。笔者以“年终奖”为关键字在《财会月刊》历年期刊中搜索,有十篇论文探讨这个问题。这些论文的研究方向大致可以分为两类:①理论分析,如任力发表在《财会月刊》2013年4月上旬刊的《发放年终奖当月工资薪金所得怎样节税》一文主要从理论上进行分析,给出了纳税筹划方案。②用软件进行优化。如张明、陈勇明发表在《财会月刊》2013年6月下旬刊的《全年一次性奖金纳税筹划模型的R数据框求解》一文用R统计软件对纳税筹划方案进行优化。
但是笔者并未查到一篇用Excel批量进行年终奖纳税筹划的文章,而Excel是广大财务人员很熟悉的软件,Excel规划求解具有很强的优化功能,特别是Excel2010规划求解中的演化计算方法可以解决非常复杂的优化问题,同时Excel VBA可以批量优化年终奖纳税筹划问题,所以用Excel来进行批量纳税筹划对财务人员具有特别重要的现实意义。
一、个人所得税和年终奖需要进行纳税筹划
个人所得税是对个人取得的各项应税所得征收的一种税,是社会财富的二次分配,是国家运用税收这一经济杠杆调节收入分配的工具。根据2011年《个人所得税法》的计算方法,发放年终奖当月工资不足3 500元的,从年终奖中扣除月工资不足3 500元的部分得到应纳税的年终奖,然后按照应纳税的年终奖数额计算年终奖的个人所得税。比如,发放年终奖当月雇员工薪为3 000元、年终奖为30 000元,则在计算个人所得税时,先用年终奖的500元补足工薪,按年终奖29 500元计税。
但是,按照《个人所得税法》的计算方法,会出现一个奇怪的现象,就是年终奖比别人多,但领到的钱却比别人少。例如,某单位给员工发放年终奖,其中一个员工是54 000元,另一个是54 001元,两人当月工资均超过3 500元。按照税法的规定来计算,前者缴税5 295元,后者却要缴10 245.2元的税。这样算下来,后者的年终奖名义上比前者高出1元,但要多缴税4 950.2元,到头来实际拿到手的钱比前者少了4 949.2元。
发生这种情况是因为两人的个税所得对应的税率不同。按照税法的相关规定,雇员年终奖适用于哪一级的税率是根据年终奖除以12个月的商来确定的。例如,54 000元除以12刚好是4 500,从属10%的税率,而54 001元除以12已经超出4 500,对应的是20%的税率。这就是所谓的年终奖的“陷阱”问题,即在一个区间内多发奖金反倒是得不偿失的。
假设年终奖发放当月员工工薪达到3 500元以上,那么按照税法的计算方法,年终奖“陷阱”有6个奖金区间,分别是:[18 000,19 283.33]、[54 001,60 187.50]、[108 001,114 600]、[420 001,447 500]、[660 001,706 538.47]、[960 001,1120 000]。在以上区间内会出现年终奖比别人多但领到的钱却比别人少的问题。
在实际工作中,工资和年终奖的发放具体数额是由员工所在单位财务部门安排的。因此在全年一次性奖金与第12个月工资总额一定的情况下,可以对全年一次性奖金与第12个月工资总额进行优化组合,从而既满足《个人所得税法》的规定,又使员工的纳税总额最小。
二、年终奖纳税筹划问题的数学模型及求解
年终奖纳税筹划问题本质上是一个数学优化问题。用x1表示第12个月工资数额,用x2表示年终奖数额,纳税总额用Z表示。第12个月工资与年终奖之和为常数,用K表示。
则年终奖纳税筹划问题的数学模型为:minZ=f(x1)+g(x2)
  x1+x2=K
  0≤x1≤K
  0≤x2≤K
令t=x1-3 500,则有:
f(x1)=
g(x2)=
因为Excel有强大的建模和优化能力,所以上面的模型可以很方便地在Excel中建模和求解,下面举例说明。
例:甲的第12个月工资与年终奖之和为33 500元。其纳税筹划Excel模型如表1所示。

 

 


其中:C2单元格内的公式为“=D2-B2”,E2单元格内的公式为“=ROUND(MAX(($B2-3500)∗{0.03,0.1,0.2,0.25,0.3,0.35,0.45}-{0,105,555,1005,2755,5505,13505},0),2)”,F2单元格内的公式为“=($C2+MIN(3500,$B2)-3500)∗LOOKUP(($C2+MIN(3500,$B2)-3500)/12,{0,1500.01,4500.01,9000.01,35000.01,55000.01,80000.01},{0.03,0.1,0.2,0.25,0.3,0.35,0.45})-LOOKUP(($C2+MIN(3500,$B2)-3500)/12,{0,1500.01,4500.01,9000.01,35000.01,55000.01,80000.01},{0,105,555,1005,2755,5505,13505})”,G2单元格内的公式为“=E2+F2”。
因为该优化问题的目标函数是非平滑的,所以需要选择Excel规划求解中演化求解方法,优化后的第12个月工资为15 499.90元,年终奖为18 000.10元,纳税总额为2 534.97元。该模型的Excel规划求解对话框如图1所示。

 

 

 

 

 

 

 

 

三、Excel VBA在年终奖纳税筹划问题批量求解中的应用实例
假设某单位有1 000名员工,这1 000名员工的纳税筹划模型如表2所示。表2中第一行的数据和公式与表1一样,表2中第2行到第1 000行的公式是通过Excel的复制公式功能实现设定的。

 

 

 

 


在Excel中利用VBA进行批量纳税筹划的步骤如下:
步骤一:在Excel VBA中插入模块,然后复制下面的VBA代码到模块中。
Sub opttax()
    Dim IncomeRange As Range
    Dim TotalTax As Range
    Dim Totalincome As Range
    Dim i As Double
    Set IncomeRange=Application.InputBox(prompt:="请选择一列第12个月工资单元格区域,单元格内不包含公式!", Type:=8)
    Set TotalTax=Application.InputBox(prompt:="请选择一列纳税总额区域!",Type:=8)
    Set Totalincome = Application.InputBox(prompt:="请选择一列第12月工资与年终奖之和的区域!", Type:=8)
    Application.ScreenUpdating = False
    For i = 1 To IncomeRange.Count
        SolverOk SetCell:=TotalTax.Item(i).Address, MaxMinVal:=2, ValueOf:=0, ByChange:=IncomeRange.Item(i).Address, Engine:=3 _
        , EngineDesc:="Evolutionary"
        SolverAdd CellRef:=IncomeRange.Item(i).Address, Relation:=1, FormulaText:=Totalincome.Item(i).Address
        SolverSolve UserFinish:=True
        Solver.SolverReset
    Next i
    Application.ScreenUpdating = False
End Sub
%以下代码位于插入的模块代码窗口中
Option Explicit
Sub CreateMenuItem()
    Dim ToolsMenu As CommandBarPopup
    Dim NewMenuItem As CommandBarButton
        Call DeleteMenuItem
    Set ToolsMenu = CommandBars(1).FindControl(ID:=30007)
    If ToolsMenu Is Nothing Then
        MsgBox "不能添加按钮!"
        Exit Sub
    Else
        Set NewMenuItem = ToolsMenu.Controls.Add _
            (Type:=msoControlButton)
        With NewMenuItem
            .Caption = "批量纳税筹划"
            .OnAction = " opttax "
        End With
    End If
    End Sub
Sub DeleteMenuItem()
    On Error Resume Next
    CommandBars(1).FindControl(ID:=30007). _
        Controls("批量纳税筹划").Delete
End Sub
步骤二:为了在Excel界面中出现“批量纳税筹划”按钮,在VBA 编辑器中添加以下代码。
%位于ThisWorkbook代码窗口
Private Sub Workbook_Open()
    Call CreateMenuItem
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call DeleteMenuItem
End Sub
步骤三:从加载项选项卡中点击“批量纳税筹划”按钮,即出现图2的对话框。选择B2:B1001,然后会出现“请选择一列纳税总额区域!”对话框,选择G2:G1001,最后会出现“请选择一列第12月工资与年终奖之和的区域!”,选择E2:E1001,点击确定后计算结果如表3所示。

 

 

 

四、小结
本文先用Excel的演化功能优化第12个月工资和年终奖组合,然后用Excel VBA给出了批量进行纳税筹划的计算方法,最后结合实例验证了这个方法具有很好的可行性与准确性,从而为广大企业合理安排年终奖的发放提供了一个可供参考的方法。
主要参考文献
1. 张明,陈勇明.全年一次性奖金纳税筹划模型的R数据框求解.财会月刊,2013;12
2. 任力.发放年终奖当月工资薪金所得怎样节税. 财会月刊,2013;7
3. 贾华芳.年终奖金发放方式的纳税筹划.财会月刊,2007;5