[算表] VBA如何自定义健保级距的计算函数

楼主: moodyblue   2016-12-11 20:44:54
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
作者: layzer (我有一个猪宝贝)   2016-12-12 07:59:00
考量到未来其他人修改的方便度 我会用vlookup....http://i.imgur.com/sNsNE5P.png

Links booklink

Contact Us: admin [ a t ] ucptt.com