2017-08-13 195 views
7

我在寻找一个在=countif(range_of_formulas, [criterion])中使用的标准,它将识别公式的非空白结果。 我发现其中不少几个,如"<>""<>"&"","<>""",">""","*"和更多(例如在SO herehere)。 但每个标准似乎只在某些情况下,而不是别人的工作,他们都失败在以下情况:COUNTIF无法计算非空白公式结果?

enter image description here 列A和B有我的原始数据。 D栏列出了您在C栏中看到的公式的结果。F栏显示的结果为countif,使用不同的标准(如E栏所示)来计算D栏中的非空白结果。没有一个达到正确的计数 - 5

在我的研究中(以及对这个问题的回答,在我编辑缩小范围之前),我已经看到了许多解决方法,可以正确计数。 但我要求的是,如果有一个标准,将在countif工作,或者如果countif不能可靠计数非空白公式结果?
(或者有人可以说在哪些条件下可以或不可以使用)。

+1

您介意两次使用COUNTIF吗? '= COUNTIF($ D $ 1:$ D $ 8,“<>”“”) - COUNTIF($ D $ 1:$ D $ 8,“”)' – ian0411

+0

我想这只有'countif's,但它仍然是一种解决方法。 ..从我得到的答案到目前为止,我得出的结论是,'countif'没有直接的方法来计算这个...直截了当我的意思是= COUNTIF($ D $ 1:$ D $ 8,“[非 - “”]“)'。如果有人知道这是不可能的,那也是一个答案。 –

+0

你确实发现了一个很好的问题。我尝试了几个小时,但无法在“COUNTIF”语句中工作。 'COUNTIF($ D $ 1:$ D $ 8,“”“)'但是用'= COUNTIF($ D $ 1:$ D $ 8,”<>“”“)不能得到5, 。 MS中的某个人应该修复这个bug ...哈哈。 – ian0411

回答

5

这可以通过在第一个论坛上进行简单的更改来实现,以强制输出为字符串值(如果需要使用数字结果执行计算,将它们乘以1以在使用时将其转换回数字)

我只是加入了一个空字符串的第一个公式的结果结束,并包裹在括号保持Excel的幸福:

=(IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"")&"")

现在你可以使用通配符任何字符(?)和任意长度的字符串(*)一起作为您的标准以达到您想要的共5个:

=COUNTIF($D$1:$D$8,"?*")

enter image description here

1

这应该工作:

=(COUNTA(range) - COUNTBLANK(range)) 

COUNTA - 计数所有的细胞和内容

COUNTBLANK - 计数所有的细胞评价为空白

,但没有内容的单元格的提防,他们会增加COUNTBLANK但不是COUNTA,使计算出轨。

1

COUNTIFS例如,

=COUNTIFS(A1:A8, "<>", B1:B8, 1) 

另一个SUMPRODUCT例如,

=sumproduct(sign(len(d1:d10))) 
+0

我看到你的意思'countifs'的例子,我想这将在我上面发布的例子中工作,但我不能在我的真实情况下实现这一点,因为公式是作为VBA过程的一部分动态写入的,所以我只能将'countifs'引用到这些公式的结果中。换句话说,参考上面的例子 - 我将需要示例中的'countifs'来指代仅列** D ** –

+0

如果使用VBA编写d1:d8中的公式,则使用.range(“d1: d8“)= .range(”d1:d8“)。value2将公式写入d1:d8后立即生效。这将把零长度的字符串变成真实的空白单元格。 – Jeeped

+0

以及事情是我需要这些公式保持动态 - 代码是建立一个模板,这将只会被填补后... –

4

不,这是不可能的。 COUNTIF使用一些与正常Excel公式中的比较不同的解释来解析条件。

在双引号,在开始比较运算可被解析:=,>,> =,< =,<,<>

之后,一切都可以是一个数或字符串。任何不能被解析为数字的东西都会被解析为一个字符串。然后根据它是数字还是字符串进行比较。

数字比较忽略字符串,字符串比较忽略数字。

“> 3”将计算大于3的所有数字。它忽略所有字符串。 “c”将计算大于c的所有字符串(即任何以c开头的任何后面跟另一个字符或任何以较高字符代码开始的任何东西)。它忽略所有数字。

“> 3 *”将计数大于字符3的所有字符串。当您尝试执行“>”“”时,“”用于表示“字符(因为它在公式中的双引号内)”,所以您在此实际做的比较是:所有大于人物。拉起一个Unicode图表,你会看到只有!小于“,所以如果你把!!加上任何事情,或者”如果你的数据本身,你会得到更少的数量。

同样,“>”“”“”只是比较由两个双引号而不是空字符串组成的字符串。

无法将空字符串传递到COUNTIF函数中。

你需要另一种解决方案,无论是:

  1. IF语句返回比可以在COUNTIF语句中测试了nullstring以外的任何值较早

    变化。你甚至可以使用CHAR(1)显示出现空白的非打印字符,但仍然被排除在COUNTIF:=COUNTIF(D1:D8,"<>"&CHAR(1))

  2. 使用多个COUNTIFS表示,计数串的数量和号码的数量:=COUNTIF(D1:D8,"?*")+COUNTIF(D1:D8,">0") (> 0使用假设有只正数,否则你将还需要添加在那些< = 0)

  3. 使用其他功能的其他用户的建议数的计数

+0

是的 - 问题是有一个字符串标准,它将关系运算符与标准值相结合:我自己的ACOUNTIFS版本的COUNTIFS通过允许特殊的数据类型标准#EMPTY,#N,#TXT等来解决这个问题并且有特殊的处理数据类型的过程。 –

1

这取决于你如何编写公式。

更改您的If()公式,如下所示并使用Countif如上所述将会产生正确的答案。

=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"|^|") 

=COUNTIF(C1:C8,"<>|^|") 

或者

如果你不能改变。如果()公式,那么你必须改变COUNTIF()来SUMPRODUCT()来获得正确的结果。

=IF(AND(B1=1,ISBLANK(A1)=FALSE),A1,"") 

=SUMPRODUCT(--(TRIM($C$1:$C$8)<>"")) 
4

如前所述,并非直接没有帮助。所以;为适应这一

也许最简单的方法可能是:

=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逻辑。当您提供多个条件时,所有条件必须匹配才能生成一个计数。 一种解决方案是在数组常量中提供多个条件...