计数单元格的Excel公式为非空,无效或0

我有一个公式,我想用来检查一个单元格是否没有“无效”值。 但是,它也计数空单元格,并且其中有任何不等于零的单元格:

=COUNTIF(A2:A200,"<>0") 

这只会检查单元格的值是否为“0”。 我可以添加什么,以便它不会计算空的单元格或具有如下值的单元格:

 ####### VALUE? r 

等等。我想要的是统计有多less个单元格中有一个不等于0的数字,或者是一个错误。

下面的数组公式计算所有非0和非空值,然后减去包含错误的单元格的计数。

您需要按CTRL + SHIFT + ENTER以正确执行此公式:

 =COUNTIFS(A2:A200,"<>0", A2:A200,"<>"&"", A2:A200,"<>"&"NIL") - SUM(IF(ISERROR(A2:A200),1,"")) - SUM(IF(ISNA(A2:A200),1,"")) 

这个公式只会计算数字<> 0,不包括空格,错误消息等,但是它不会排除显示 ######(但确实包含一个数字)的单元格,如果原因是一列太狭窄,或者是否定的date或时间值。

  =SUMPRODUCT(--ISNUMBER(A2:A200))-COUNTIF(A2:A200,0) 

如果您确实要避免计算显示#######的单元格,而底层内容的数字不等于零,则需要使用UDF来处理单元格的Text属性。 此外,缩小或扩大列以产生影响不会触发计算事件,会更新公式,所以您需要以某种方式执行此操作,以确保公式结果是正确的。

这就是为什么我在代码中添加了Application.Volatile的原因,但是仍然有可能产生公式的结果与被检查的范围内的显示不一致的情况,至less直到下一个计算事件发生。

要input这个用户自定义函数(UDF), alt-F11打开Visual Basic编辑器。 确保您的项目在“项目浏览器”窗口中突出显示。 然后,从顶部菜单中select插入/模块,然后将下面的代码粘贴到打开的窗口中。

要使用这个用户定义函数(UDF),input一个像

  =CountNumbersNEZero(A2:A200) 

在一些细胞。

 Option Explicit Function CountNumbersNEZero(rg As Range) As Long Application.Volatile Dim C As Range Dim L As Double For Each C In rg If IsNumeric(C.Text) Then If C.Text <> 0 Then L = L + 1 End If Next C CountNumbersNEZero = L End Function 

您最多可以嵌套7个有效或无效的条目。 如果您需要更多的信息,您应该为您的“黑名单”指定一个列,您可以将其添加到发生导致您认为不应该有效的计数的条目中。 例如:

 =IF(ISERR(VLOOKUP(A1,Sheet1!E:E,1,FALSE))=FALSE,1,0) 

如果列“E”是您认为无效的值的列表。 将其拖到您的标准和总和旁边。

编辑:我不知道countifs。 所以你有几个解决scheme,在这里,根据你的喜好。