当范围包含空单元格或带有文本的单元格时,Worksheetfunction.average返回错误

时间:2015-01-18 00:46:26

标签: excel excel-vba vba

我正在处理可以包含数字和文本(或空单元格)的小范围(只有一列)。 worksheetfunction.average的描述说“参数可以是数字或名称,数组或包含数字的引用”。和“如果数组或引用参数包含文本,逻辑值或空单元格,则忽略这些值。”它也说“不计算空单元格,但零值是。”

然而,

With Sh 
SlpStdBlkCorr_Sh.Range("T2") = WorksheetFunction.Average(.Range(RawPb208Range)) 
End with

引发“无法获取工作表功能类的平均属性”错误。

这行代码重复使用,因此所有变量都已完美设置,只有当范围有空单元格或带有文本的单元格时,才会出现此错误。

.average不应忽略具有非数字内容的这些单元格吗?

我已经通过Paul Aford尝试了解决方案,但问题在于,当我计算某些东西时,我可以创建一些怪物,只需将变量等于0(SlpStdBlkCorr_Sh.Range("T2")=0)或1({{1} })。

想法?

1 个答案:

答案 0 :(得分:1)

在我的测试中,只有当范围包含非数字值和/或空白单元格时才会出错。这与工作表中AVERAGE函数的行为相匹配。如果您使用的公式包含=AVERAGE(A1:A10),并且这些单元格都是非数字或空白的,则会返回" #DIV / 0"。

这是有道理的,因为没有数字,没有什么可以分开,所以分母是零。

这是您可以用来测试的工作表选择更改事件:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Count function returns cells with numeric values    
If WorksheetFunction.Count(Selection) > 0 Then
    Debug.Print WorksheetFunction.Average(Selection)
Else
    Debug.Print "Nothing to Average"
End If
End Sub

请注意,如果范围中的一个或多个单元格具有返回错误的公式,例如#N/A,则会看到相同的错误消息。