VBA如何自定义健保级距的计算函数 网志图文版: http://www.b88104069.com/archives/4140 先前文章分享利用IF函数,依照健保级距计算应负担金额,并且介绍如何以 VBA达到相同效果。VBA程式在设计上非常灵活自由,但纯粹用在计算式上, 有个麻烦点在定义储存格,如果报表的内容和位置不会更新,直接在程式里 写好固定的作用范围即可,但如果报表可能会变动,能够参照储存格的函数 公式,似乎方便许多。对此,完美解决方案是将VBA程式设定为函数,也就是 自定义函数,以下分享具体操作: 一、健保级距计算公式:“=IF(D2<20100,284,IF(D2<21000,296,IF( D2<21900,309,IF(D2<22800,323,336))))”。有多少级距,架多少层 IF判断式,虽然错不了,但整个看起来很伤眼。 二、开启“Visual Basic(Alt+F11)”编辑器。现在常用VBA,于是把这个 指令加到快速工具列。具体作法,可参考《会计人的Excel小教室》第一章第 一节。 三、在VBE(Visual Basic Editor,VBA编辑器)上方的工具列:“插入”、 “模组”。 四、和上个步骤比较,可以发现在左边的专案视窗中(VBAProject),多了 一个模组(Module1),打开“Module1”的编辑视窗,输入如下程式: Public Function TAX(income) If income < 20100 Then TAX = 284 If income >= 20100 And income < 21000 Then TAX = 296 If income >= 21000 And income < 21900 Then TAX = 309 If income >= 21900 And income < 22800 Then TAX = 323 If income >= 22800 And income < 24000 Then TAX = 336 End Function “Function”是设定函数的意思,“TAX”是自定义名称,“income”是函数 的第一个参数,如须设定第二个以上的参数,要用“,”隔开。中间便是原本 IF函数公式的VBA版,最后以“End Function”结束。 五、关掉VBE,回到工作表,在资料编辑列输入公式:“=TAX(D2)”。神 奇的事情发生了,原本一串又臭又长的公式,变得如此干净俐落。重点是, 计算结果完全一样。 六、开启“插入函数”视窗,会发现“或选取类别”多了一个“使用者定义 ”,下面的“选取函数”有刚新增的“TAX”函数。 七、按下资料编辑列,跳出“函数引数”,从另外一个角度,欣赏自己一手 打造的Excel函数。 VBA自定义函数有蛮多用途的,除了简化Excel工作表计算公式,它还同时也 能使用在VBE程式中,这是一般程式语言都会有的功能。一方面,在程式代码 越写越长的情况下,简化整体代码、显得更有架构和层次、更易于阅读理解 ,另方面,有些工作表的函数可以直接套用在VBE,例如这篇文章的IF函数, 两边通用,但也有些常用的工作表函数,例如COUNTIF、SUNIF、VLOOKUP,并 不能直接在VBE环境使用,这是因为VBA和Excel本来就是两个不同的环境,这 时候如果有需要,可以在VBA自己写相同效果的自定义函数,具体用法,以后 有机会再分享。 延伸阅读: VBA如何检查应付帐款负数 http://www.b88104069.com/archives/4126 VBA如何计算健保应负担金额 http://www.b88104069.com/archives/4136 《会计人的Excel小教室》 序 http://www.b88104069.com/archives/4128