我有一个公式,我想用它来检查一个单元格中是否没有“无效”值。但是,它也在计算空单元格,以及其中包含任何不等于零的任何单元格:
=COUNTIF(A2:A200,"<>0")
这仅检查单元格的值是否为“0”。我可以添加什么,以便它不会计算空单元格或具有以下值的单元格:
#######
VALUE?
r
等。我想要的只是计算有多少单元格中有一个不等于0的数字,或者是错误。
答案 0 :(得分:2)
下面的array formula首先计算所有非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,""))
答案 1 :(得分:1)
此公式仅计算数字&lt;&gt; 0,不包括空格,错误消息等。但是,如果出现原因,它不会排除显示 ######(但真的包含数字)的单元格这是一个太窄的列,或者是负日期或时间值。
=SUMPRODUCT(--ISNUMBER(A2:A200))-COUNTIF(A2:A200,0)
如果你真的想避免计算显示#######的单元格,当底层内容是一个不等于零的数字时,你需要使用UDF来处理单元格的Text属性。此外,缩小或加宽列以产生该影响不会触发更新公式的计算事件,因此您需要以某种方式执行此操作以确保公式结果正确。
这就是为什么我将Application.Volatile添加到代码中,但仍然可能产生这样的情况:公式的结果与正在检查的范围中的显示不一致,至少在下一个计算事件发生之前的地方。
要输入此用户定义函数(UDF), alt-F11 将打开Visual Basic编辑器。 确保在Project Explorer窗口中突出显示您的项目。 然后,从顶部菜单中选择“插入/模块” 将下面的代码粘贴到打开的窗口中。
要使用此用户定义函数(UDF),请输入类似
的公式 =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
答案 2 :(得分:0)
您最多可以嵌套7个有效或无效的条目。如果您需要更多,您可能应该为您的“黑名单”列指定一个列,当事件导致您认为不应该有效的计数时,您可以添加该列。例如:
=IF(ISERR(VLOOKUP(A1,Sheet1!E:E,1,FALSE))=FALSE,1,0)
列“E”是您认为无效的值列表。将其向下拖动到您的标准旁边并加总。
编辑:我不知道countifs。所以你有几个解决方案,这取决于你的偏好。