VBA代码如下:
Public Function aveifnot0(ParamArray canshu() As Variant) As Double
'本函数为求非零平均数,参数为零散的单元格,而非单元格区域。求连续的单元格区域的非零平均值可以使用
'Excel内置函数AVERAGEIF
'定义函数,数组参数需要用关键字ParamArray定义,类型也必须为Variant
Dim sum As Double '声明sum为double型数据类型,sum是要计算非零数的累计和
Dim i, k As Integer '声明i,k为单整形
sum = 0 '给sum初始化为零
k = 0 '给k初始化为零,k是计算非零数的个数
For i = LBound(canshu) To UBound(canshu) '开始循环,LBound取数组的第一位,UBound取数组的最后一位
If canshu(i).Value > 0 Then '判断数组里某一个数的值是否大于零
sum = sum + canshu(i).Value '如果大于零,将其值累加
k = k + 1 '如果大于零,计数
Else '否则不执行任何事情
End If '结束条件判断
Next i '循环
aveifnot0 = sum / k '循环完毕,返回非零平均值
End Function '自定义函数结束