VBA
第4部分 自定义函数
自定义函数与Excel工作表函数相比具有更强大、更灵活的功能. 自定义函数可以用来简化公式, 也可以用来完成Excel工作表函数无法完成的功能.
4.1 什么是自定义函数
自定义函数(User-defined Worksheet Function 简称UDF)就是用户创建的用于满足特定需求的函数, 是对于Excel内置工作表函数的一个补充. Excel已经提供了数百个工作表函数可供选择使用, 有必要创建自定义函数吗? 答案是肯定的. 自定义函数的优势在于:
自定义函数可以简化公式. 在一般情况下, 组合使用Excel工作表函数完全可以满足绝大多数应用, 但是复杂的公式有可能太冗长和繁琐, 其可读性非常差, 不容易修改, 除了公式的作者之外, 公式的使用者可能很难理解公式的含义. 此时就可以通过使用自定义函数来进行简化.
自定义函数与Excel工作表函数相比具有更强大和更灵活的功能. Excel实际应用中, 要求是千变万化的, 仅仅使用Excel工作表函数常常不能圆满地解决问题. 此时就可以考虑使用自定义函数来满足实际工作中的个性化需求.
与Excel工作表函数相比, 自定义函数的弱点也是显而易见的, 就是自定义函数的效率要远远低于Excel工作表函数, 完成同样的功能需要花费更多的时间. 因此对于可以应用于VBA中的Excel工作表函数功能, 应该使用中讲述的方法进行引用.
4.2 函数的参数与返回值
VBA中参数有两种传递方式: 按值传递(关键字ByVal)和按地址传递(关键字ByRef). 参数的默认传递方式为按地址传递, 因此如果希望使用这种方式传递参数, 可以省略参数前的关键字.
这两种传递方式的区别在于, 按值传递只是将参数值的副本传递到调用过程中, 在过程中对于参数的修改, 并不改变参数的原始值; 按地址传递是将该参数的引用传递到调用过程中, 在过程中任何对于参数的修改都将改变参数的原始值.
一值或数组. 如下面的自定义函数TaxRate根据工资数返回相应的税费税率, 如果在工作表中使用公式实现则需要多层If结构嵌套. Function TaxRate(Salary) Select Case Salary – 1000 Case Is < 0 TaxRate = 0 Case Is <= 500 TaxRate = 0.05 Case Is <= 2000 TaxRate = 0.1 Case Is <= 5000 TaxRate = 0.15 Case Else TaxRate = 0.2 End Select End Function