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:

  1. 更改较早的IF语句,以返回可以在COUNTIF语句中testing的一个空string以外的任何值。 您甚至可以使用CHAR(1)显示一个不可打印的字符,该字符显示为空白,但仍可以排除在COUNTIF: =COUNTIF(D1:D8,"<>"&CHAR(1))

  2. 使用多个计数string数量和数字的=COUNTIF(D1:D8,"?*")+COUNTIF(D1:D8,">0")=COUNTIF(D1:D8,"?*")+COUNTIF(D1:D8,">0") (假设只有正数,否则你还需要添加<= 0的数字)

  3. 使用其他用户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)<>""))