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

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

然而,

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

引发了“ 无法获得工作表function类的平均属性 ”的错误。

这行代码被重复使用,所以所有的variables都被完美地设置了,并且这个错误仅在范围内有空单元格或者文本单元格时才会出现。

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

我已经尝试了由保罗·阿福德解决scheme,但问题是,因为我正在计算一些东西,我可以创build一些SlpStdBlkCorr_Sh.Range("T2")=0variables为0( SlpStdBlkCorr_Sh.Range("T2")=0 )或1( SlpStdBlkCorr_Sh.Range("T2")=1 )。

想法?

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

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

您可以使用以下工作表select更改事件来testing此事件:

 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 ,则会看到相同的错误消息。