我们热爱生命科学!-生物行

Excel中自定义函数实例剖析(2)

时间:2006-01-08 16:13来源:Internet 作者:bioguider 点击: 461次

图 4

 


图 5

 

  如果想要在其它机器上使用该自定义函数,只要把上面的加载宏文件复制到其它电脑上加载宏的默认保存位置即可。

  说明:Windows XP系统下加载宏文件的默认保存位置为:C:Documents and Settingszunyue(用户帐户)Application DataMicrosoftAddIns文件夹。

 任务

  为了促进销售人员的工作积极性,销售部门经理制定了销售业绩奖金制度,奖金发放的标准奖金率如下:月销售额小于等于2800元的奖金率为4%,月销售额为2800元至7900元的奖金率为7%,月销售额为7900元至15000元的奖金率为10%,月销售额为15000元至30000元的奖金率为13%,月销售额为30000元至50000元的奖金率为16%,月销售额大于50000元的奖金率为19%。同时,为了鼓励员工持续地为公司工作,工龄越长对奖金越有利,具体规定为:参与计算的奖金率等于标准奖金率加上工龄一半的百分数。比如一个工龄为5年的员工,标准奖金率为7%时,参与计算的奖金率则为9.5%=7%+(5/2)%。

  分析

  首先,我们在Excel2003中制作好如图6的Sheet1工作表,开始分析计算的方法。


图 6

   如果不考虑工龄对奖金率的影响,那么可以利用嵌套使用IF函数,在D2单元格输入公式“=IF(B2<=2800,B2*4%,IF(B2<=7900,B2*7%,IF(B2<=15000,B2*10%,IF(B2<=30000,B2*13%,IF(B2<=50000,B2*16%,B2*19%)))))”可以进行计算。

  但是,该公式的一些弊端很明显:一是公式看起来太繁琐、不容易理解,而且IF函数最多只能嵌套7层,万一奖金率超过7个,那么这个方法就无能为力了。

  另一方面,由于没有考虑工龄,所以该方法不能算是解决问题了,如果我们把工龄融入到上述公式中,这样公式就会显得更加冗长繁琐,以后的管理与调整都很不方便。

  使用自定义函数

  下面我们看看利用Excel自定义函数进行计算的全过程,有了实例一的基础,相信大家理解起来更容易了。不过这里与实例一有一个明显的差别是,该自定义函数使用了2个参数,请大家注意体会。

  1. 在上述Excel工作表中,选择菜单“工具→宏→Visual Basic编辑器”命令,打开Visual Basic窗口,然后选择菜单“插入→模块”命令,插入一个名为“模块1”的模块。

  2. 接着在模块编辑窗口中输入自定义函数的代码如下(图 7):

  Function REWARD(sales, years) As Double

  Const r1 As Double = 0.04

  Const r2 As Double = 0.07

  Const r3 As Double = 0.1

  Const r4 As Double = 0.13

  Const r5 As Double = 0.16

  Const r6 As Double = 0.19

  Select Case sales

  Case Is <= 2800

  REWARD = sales * (r1 + years / 200)

  Case Is <= 7900

  REWARD = sales * (r2 + years / 200)

  Case Is <= 15000

  REWARD = sales * (r3 + years / 200)

  Case Is <= 30000

  REWARD = sales * (r4 + years / 200)

  Case Is <= 50000

  REWARD = sales * (r5 + years / 200)

  Case Is > 50000

  REWARD = sales * (r6 + years / 200)

  End Select

  End Function


图 7

   3. 从代码可以看出,我们自定义了一个名为REWARD的函数,它包含两个参数:销售额sales和工龄years。常量r1至r6分别存放着各个等级的奖金率,这样处理的好处是当奖金率调整时,修改非常方便。同时,函数的层次结构比前面的公式清晰,让人容易理解函数的功能。此外,当奖金率超过7个时,用自定义函数的方法仍然可以轻松处理。

  4. 接下来用该自定义函数进行具体的计算。选择菜单“文件→关闭并返回到Microsoft Excel”命令,关闭Visual Basic窗口,返回Excel工作表。选中D2单元格,在其中输入“=reward(B2,C2)”,回车后就算出了第一个员工的奖金,然后利用公式填充柄复制该公式到后面的单元格,即可完成对其它员工奖金的计算(图 8)。


图 8

    如果该自定义函数需要在其它工作薄或其它机器上使用,仿照实例一的操作方法进行即可。

  四、 总结

  我们通过两个典型的实例讲述了Excel中自定义函数使用的全过程,相信大家都已经会到,其操作过程还是相当简单的。

  如果你觉得自己的工作可能需要自定义函数,想进一步学好提高使用自定义函数的水平,笔者想给出如下几点建议。

  第一点、尽力全面熟练地掌握Excel内置的函数。能用内置函数妥善解决的问题,就不必使用自定义函数。实际上,自定义函数的执行效率当然是比Excel内置函数的执行效率慢的。

  第二点、认真掌握好VBA的基础知识。这点很容易理解,如果连VBA的基本规则都不甚清楚,那么别说是写出精致的自定义函数,就是写出能解决问题的自定义函数也还大有疑问。

  第三点、具体写自定义函数代码之前,应该认真分析自己要处理的实际问题,如果这个问题有实际的数学函数模型,那么最好列出这个函数的解析式。

  以上只是笔者的一些浅薄认识,希望能为大家使用好Excel自定义函数带来帮助,也希望大家能够通过使用自定义函数提高自己的工作效率。

(责任编辑:泉水)
顶一下
(6)
100%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片