|
本帖最后由 d346836673 于 2016-5-21 13:49 编辑
一组数据取三个测值的平均值 当三个测值的最大值或最小值中 ,如有一个与中间值的差值超过中间值的15%时,则把最大值和最小值一并舍除,取中间值; 如有两个测值与中间值的差值均超过中间值的15%时,无效 自定义函数是中文 抗压 意思是 抗压(a#,b#,c#,d&)判断abc三个数 保留d位小数
Function 抗压(a#, b#, c#, d&) As Double
If Application.And(Application.Max(a, b, c) / Application.Median(a, b, c) > 1.15, Application.Median(a, b, c) / Application.Min(a, b, c) > 1.15) Then
抗压 = "无效"
ElseIf Application.Or(Application.Max(a, b, c) / Application.Median(a, b, c) > 1.15, Application.Median(a, b, c) / Application.Min(a, b, c) > 1.15) Then
抗压 = Round(Application.Median(a, b, c), d)
Else
抗压 = Round(Application.Average(a, b, c), d)
End If
End Function
原因:因为返回值可能是文本,所以不可以定义成Double。
解决:函数返回值不定义成Double就行了。
这么写好查看些。
Function ky(a#, b#, c#, d#) As Variant
Dim max, med, min, avg, tj1, tj2
max = Application.max(a, b, c)
med = Application.median(a, b, c)
min = Application.min(a, b, c)
avg = Application.Average(a, b, c)
tj1 = max / med > 1.15
tj2 = med / min > 1.15
Select Case tj1 + tj2
Case 0
ky = Round(avg, d)
Case -1
ky = Round(med, d)
Case -2
ky = "无效"
End Select
End Function
|
|