【问题标题】:Worksheetfunction.average returning error when range contains empty cells or cells with text当范围包含空单元格或带有文本的单元格时,Worksheetfunction.average 返回错误
【发布时间】:2015-01-18 20:49:07
【问题描述】:

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

然而,

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

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

这行代码被重复使用,所以所有变量都设置得很好,只有当范围有空单元格或有文本的单元格时才会出现这个错误。

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

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

想法?

【问题讨论】:

  • 我刚刚测试的一行代码“Application.WorksheetFunction.Average (ActiveSheet.Range("A1:A6"))”在包含数字、空格和文本的范围内工作得非常好.如果您真的需要帮助,您应该向我们提供更多信息。
  • 范围内没有数值时会出现此问题
  • @GeneSkuratovsky,我尝试在我的工作表中使用您的代码行,同时处于中断模式,结果与我之前描述的相同。我尝试结束代码,然后再次运行您的代码,但出现了相同的错误消息。也许与单元格格式有关?
  • @Felipe 我在下面阅读了您对 csv 文件的评论。不,这不会导致问题(我在一分钟前测试过)。如果你有带数字的单元格,无论单元格格式如何,你都很好。无论如何,你在那些牢房里有什么?带有数字的单元格内容示例(如在编辑栏中的样子)?
  • @Felipe 您没有在公式栏中显示单元格的视图,但从您在此处链接的捕获图像中我可以清楚地看到一切正常。如果没有详细了解“全局”,我认为我不能做更多的事情:至少,所有代码都包含在这个序列中,但也许更多。唉,有效的故障排除是一种“通过逆境”发展的技能。祝你好运。

标签: excel vba


【解决方案1】:

在我的测试中,只有当范围包含 only 非数字值和/或空白单元格时才会出错。这与工作表中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,您将看到相同的错误消息。

【讨论】:

  • 你是对的,当然,但这并不是 OP 抱怨/困惑的,是吗?他从来没有提到“范围内没有数值”——只是一件小事,这是:)
  • @GeneSkuratovsky,我认为它确实解决了 OP 的问题。 (希望我们能找到答案。)他们说“仅当范围包含空单元格或带有文本的单元格时才会出现此错误”。我认为问题可能只发生在范围仅包含空单元格或带有文本的单元格时。 (或者,当区域中的一个或多个单元格出现公式错误时,可能会发生相同的错误,例如 #N/A,但在我看来,这种可能性不大。)
  • @DougGlancy,您理解我的问题,但它发生在带有数字的单元格和带有文本或空的单元格的混合范围内。我总是说空或文本,因为用文本填充它们或试图清除它们的内容是我解决这个问题的尝试。我现在意识到的是,导致所有这些问题的工作簿是一个制表符分隔的文件,我使用 VBA 打开并用来计算我的东西。这相关吗?在另一个打开的工作簿中使用 GeneSkuratovsky 的代码不会引发错误。
  • 在工作簿本身中尝试一个AVERAGE 公式,该公式会在 VBA 中给您带来问题。我假设工作表公式将返回#DIV/0。我的猜测是这些数字实际上是作为文本导入的。
  • @DougGlancy,我尝试了就像 GeneSkuratovsky 在他的第一条评论中所说的那样,但结果相似,只是现在停止程序后,平均功能可以完美运行。有一些影响这种情况的因素我还没有注意到,也许是我的程序在到达这一点之前所做的事情。看看我上面发布的例子。想法?
猜你喜欢
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多