工作中经常在 Excel 中使用公式,很多问题不是一个函数可以解决的,往往是很多函数嵌套在一起。熟练以后,输入很长很长的公式倒也不是什么难事,就当是一次脑筋锻炼。但是阅读上到底有点不方便,尤其是隔了很长时间再去看这个公式,又是一次脑筋锻炼,不如把工作中解决实际问题常用到的函数组合包装成单一的自定义函数来用。
下面就总结一下如何在 Excel 中自定义函数。
我这里说的自定义函数(User Defined Functions)是在 VBA 里编写的。在 Excel 窗口中,选择 Tools -> Macro -> Visual Basic Editor 。在 Microsoft Visual Basic 窗口中,选择 Insert -> Module ,准备工作就做好了。现在编写一个最简单的函数。在模块窗口输入:
Function Hello () Hello="Hello, World!" End Function
按保存按钮,切换回 Excel 窗口(快捷键 Alt+F11),随便找个单元格输入 =Hello() ,就可以看到效果了。
编写自定义函数,一定要了解声明和定义函数的语法,有了初步的实战经验后,再来看一下定义函数的语法。Function 语句用来声明自定义的函数。语法:
[Public | Private | Friend] [Static] Function name [(arglist)] [As type] [statements] [name = expression] [Exit Function] [statements] [name = expression] End Function
语法包含的部分虽然多,但大多数都是可以省略的,不可或缺的就两条: Function name 和 End Function ,连函数体都是可以省略的。 name 是我们给自定义函数起的名字。 Function name 和 End Function 一开一合,打下了自定义函数的框架。
对其它可选部分也作一下说明。- Public,Private,Friend 是访问控制关键词,定义了函数的可见范围。默认是 Public 访问。
- Static 这是个跟存储有关的关键词,指定的话表示函数体内的局部变量在各个调用之间值保持不变。
- arglist 是参数列表,虽然可以省略,但是我们编写的函数如果不需要传入参数,意义就不大了。
- type 表示函数返回值的数据类型,可以是 Byte,Boolean,Integer,Long,Currency,Single,Double,Date,String,Object,Variant,或用户定义的类型。注意,省略 As type 不表示没有返回值,只是不显式提供返回值的类型。
- statements 这个就是函数体了,自定义函数的精髓。
- name = expression 这句用来提供返回值。如果没有向函数名赋值,函数就返回一个默认值:返回类型是数字的返回 0,返回类型是字符串的返回零长字符串(""),返回类型是 Variant 的返回 Empty,返回类型是对象引用的的返回 Nothing。
有几个注意事项:
函数的声明不能出现在另一个函数或子例程体内。函数里的变量最好显式声明以免跟其它变量冲突,在模块级使用 Option Explicit 语句来强制变量显式声明。