COUNTIF无法计算非空白公式结果?
我正在寻找一个标准来使用=countif(range_of_formulas, [criterion])
,将确定公式的非空白的结果。 我发现了很多,例如"<>"
, "<>"&""
, "<>"""
, ">"""
, "*"
等等(例如在这里和这里 ) 。 但是每个标准似乎只适用于某些情况而不适用于其他方面,而且在以下情况下都失败 :
列A和B有我的原始数据。 D列显示C栏中所见的公式的结果.F栏显示了使用不同标准(如E栏所示)的countif
结果来计算D栏中的非空白结果。它们中没有一个达到正确的数量–5 。
在我的研究中(以及对这个问题的回答,在我编辑缩小范围之前),我已经看到了许多解决方法,可以正确计数。 但是我所问的是,如果有一个标准可以用于countif
,或者countif
不能可靠地计算非空白公式的结果?
(或者也许有人可以说在哪些条件下可以或不可以使用)。
这可以通过在第一个forumla上的一个简单的改变来实现,以强制输出为一个string值(如果需要用数字结果进行计算,将它们乘以1,以便在使用时将其转换回数字)
我简单地在第一个公式的结果末尾加上了一个空白string,并用括号括起来以保持excel的高兴:
=(IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"")&"")
现在你可以使用任何字符( ?
)和任何长度的string( *
)的通配符作为你的标准,以达到你想要的总数5:
=COUNTIF($D$1:$D$8,"?*")
不,不可能。 COUNTIF使用一些与正常Excel公式中的比较不同的解释来parsing条件。
在双引号内,开始时的比较运算符可以被parsing:=,>,> =,<=,<,<>
之后,一切都是数字或string。 任何不能被parsing为数字的东西都会被parsing为一个string。 然后根据是数字还是string进行比较。
数字比较忽略string,string比较忽略数字。
“> 3”将统计大于3的所有数字。它忽略所有string。
“> c”将计算大于c的所有string(即,以c开头的任何以及其后的字符或以更高的字符代码开始的任何东西)。 它忽略所有数字。
“> 3 *”会计算大于字符3的所有string。
当你尝试做“>”“时,”“用于表示”字符“(因为它在公式中的双引号内),所以你在这里实际做的比较是:比”字符“更大的东西。 拉起一个Unicode图表,你会看到只有! 小于“,所以如果你把”!“放在后面,或者”如果你的数据本身就是这样,你就会less一个数。
同样,“>”“”“”只是比较由两个双引号而不是空string组成的string。
无法将空string传递到COUNTIF函数中。
您需要另一个解决scheme:
-
更改较早的IF语句,以返回可以在COUNTIF语句中testing的一个空string以外的任何值。 您甚至可以使用
CHAR(1)
显示一个不可打印的字符,该字符显示为空白,但仍可以排除在COUNTIF:=COUNTIF(D1:D8,"<>"&CHAR(1))
-
使用多个计数string数量和数字的
=COUNTIF(D1:D8,"?*")+COUNTIF(D1:D8,">0")
:=COUNTIF(D1:D8,"?*")+COUNTIF(D1:D8,">0")
(假设只有正数,否则你还需要添加<= 0的数字) -
使用其他用户build议的function
如前所述,不直接没有帮助。 所以;
可能最简单的方法来适应这可能是:
=SUM(COUNTIF($D$1:$D$8,{">0",""}))
要么
=SUM(COUNTIFS($D$1:$D$8,{">0",""}))
这将相应地增加和给你你的结果。 请注意,与您的相比,此COUNTIFS的使用方式与{}的位置之间存在差异。
来自: https : //exceljet.net/formula/countifs-with-multiple-criteria-and-or-logic
要使用OR逻辑基于多个标准进行计数,您可以使用带数组常量的COUNTIFS函数。 默认情况下,COUNTIFS函数应用AND逻辑。 当您提供多个条件时,所有条件必须匹配才能生成一个计数。 一个解决scheme是提供数组常量中的多个条件…
这应该工作:
=(COUNTA(range) - COUNTBLANK(range))
COUNTA – 统计所有含有内容的单元格
COUNTBLANK – 计算评估为空白的所有单元格
但要小心没有内容的单元格,他们会增加COUNTBLANK而不是COUNTA,使计算出轨。
COUNTIFS例子,
=COUNTIFS(A1:A8, "<>", B1:B8, 1)
另一个SUMPRODUCT的例子,
=sumproduct(sign(len(d1:d10)))
这取决于你如何写你的公式。
改变你的If()公式,如下所示,并使用Countif作为提及将导致正确的答案。
=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"|^|") =COUNTIF(C1:C8,"<>|^|")
要么
如果您不能更改If()公式,则必须将Countif()更改为Sumproduct()以获得正确的结果。
=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"") =SUMPRODUCT(--(TRIM($C$1:$C$8)<>""))