一、功能描述
自定义一个 Excel 函数 sumDIY(arg1, arg2, ... ),其中参数个数任意,类型也任意:可以是文本型数字"123",或纯文本"demo",或单元格区域,抑或是数组形式的引用Row(1:3)。实现功能:只对各参数中的各个数值求和,并作为函数结果显示出来。
二、思路分析
1、参数个数不确定,用关键字 ParamArray;
2、对参数的类型分类:
2.1. 对象型(如单元格区域);
2.2. 数组型(如Row(1:3));
2.3. 值类型(又分为【数值型】和【非数值型】);
三、实现代码
Function sumDIY(ParamArray arr())
Dim i&, rng As Range, sumTemp#, arrTemp
For i = 0 To UBound(arr)
'参数为单元格区域:
If IsObject(arr(i)) Then
sumTemp = 0
For Each rng In arr(i).Cells
If IsNumeric(rng.Value) Then
sumTemp = sumTemp + rng.Value
End If
Next
arr(i) = sumTemp
'参数为数组:
ElseIf IsArray(arr(i)) Then
arr(i) = WorksheetFunction.Sum(arr(i))
'参数为值类型:是数字则不变,非数字则置0:
ElseIf Not IsNumeric(arr(i)) Then
arr(i) = 0
End If
Next i
sumDIY = Application.Evaluate(Join(arr, "+"))
End Function
四、实测效果
五、注意事项
1、当参数中有数组时,公式必须切换到数组形式:【Ctrl+Shift+Enter】;
2、用内置的sum函数处理数组参数,省略了对该数组数据是按行还是按列分布的讨论,简化了代码,唯一不足是调用了工作表函数,执行效率可能会有影响。