增强Excel的SUM()函数:实现求和前非数据项的预筛查

来源:互联网 发布:医疗包升级数据 编辑:程序博客网 时间:2024/06/04 00:24

一、功能描述

  自定义一个 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函数处理数组参数,省略了对该数组数据是按行还是按列分布的讨论,简化了代码,唯一不足是调用了工作表函数,执行效率可能会有影响。


原创粉丝点击