编写自定义函数是为了处理数据,如何向自定义的函数(UDF)传递待处理的数据就成为开发者要考虑的问题。
就一般意义上的函数来说,参数列表通常是参数个数固定,类型明确的,比如下面的声明:
Public Function MyFunc1(name As String, age As Integer) As String
但是 Excel 里的函数有它的特殊性。我们在工作表里编写公式的时候,往往并不提供具体的数字或字符串,比如 ("张三",23) ,作为参数。在 Excel 里,我们习惯用单元格或单元格范围的引用来传递参数,像上面的例子,我们在调用函数时的表达方式可能是 =MyFunc1(A1,B1) 。就上面的声明而言,如果我们只允许传递单一的单元格引用给参数是正确的,Excel 知道单元格引用的数据类型。
但有的时候,对于函数的某个参数,我们希望既可以传递单一的单元格,也可以传递一块单元格范围,增加函数的灵活性,就像 =Sum(A1) 和 =Sum(A1:A5) 都是可以的。这时候我们就不合适把参数声明为基本数据类型了,声明为 Excel 特有的数据类型 Range 就可以解决上面提到的问题,因为 Range 对象既可以是单一的单元格,也可以是一块单元格范围。
更进一步,如果我们希望参数列表是变长的呢?提供一个参数可以,提供两个三个也可以,参数的个数是任意的。
一种解决方法是用