我的 Excel COUNTIF 函数始终返回“0”

我的 Excel COUNTIF 函数始终返回“0”

我正在尝试计算有多少个单元格不以 U、D 或 R 开头,在下午 15:00 之前出现并与某个日期 (A4) 匹配。我正在使用此函数:=COUNTIFS(Sheet1!$B$2:$B$1088,A4,Sheet1!$C$2:$C$1088,"<>U*",Sheet1!$C$2:$C$1088,"<>D*",Sheet1!$C$2:$C$1088,"<>R*",Sheet1!$D$2:$D$1088,"<15:00")

Sheet1 中的 B 列包含所有日期,Sheet1 中的 C 列包含以 U、D、R 或其他内容开头的单元格,Sheet1 中的 D 列包含它们出现的时间。此确切函数在我的其他工作簿中有效并返回正确值,但在此工作簿中返回 0。任何帮助都将不胜感激!提前致谢。

答案1

我观察到大多数时候 COUNTIFS 无法产生正确的结果,因此我想建议一个替代公式 SUMPRODUCT。

在此处输入图片描述

  • 单元格 F16 中的公式:

    =SUMPRODUCT((sheet1!A16:A23=$F$15)*(Sheet1!C16:C23<TIME(15,0,0)*(Sheet1!B16:B23<>"U")*(Sheet1!B16:B23<>"D")*(Sheet1!B16:B23<>"R")))
    

:警告:

  • 对我来说,单元格 F17 中的 COUNIFS 公式也有效:

在此处输入图片描述

注意:

  • 但我想推荐 SUMPRODUCT,它更好,而且永远不会错过火灾。

  • 您可以根据需要调整公式中的单元格引用。

答案2

我用不合规的数据填充了数据范围,然后应用了您的公式(复制并粘贴)。它返回了 0,正如它应该的那样。然后我开始用合规的集合替换数据,以 C 列中的第一个字母为单位变化,它继续完美地工作,直到整个范围都填满了合规的数据并返回 1087。

检查时您的公式没有明显错误,而且在实践中效果很好,更不用说它在其他地方也能正常工作。

这指向数据本身。对于数据,人们首先想到的总是“它是怎么到这里来的?”如果是导入的,尤其是从网上抓取的,那么导入过程就非常可疑,因为一般情况下,Excel 只是打开一个 CSV 文件,使用旧向导或好用的 Power Query,复制粘贴,或者尤其是从网上抓取。从网上抓取和复制粘贴通常会带来不值得的格式,而常规导入的数据仍然是自己没有创建或审查过源特性的数据。前者很明显,而后者容易出现日期字符串无法被 Excel 解析,因此不被视为日期的情况。

最后这一点似乎是可能的。B 列和 D 列都可能受到这种影响。但特别是 D 列:时间可能很有趣,尤其是当读出时间的人不知道(或不关心)您需要如何使用它们时。更不用说将它们与看不见的屏幕格式化字符一起从网络上抓取,这些字符会使 Excel 将它们视为“不是日期或时间”,但它们在列中看起来不错,您认为它们确实导入了。

您没有提供任何数据,所以我们无法提供帮助。但您可以自己动手。以开放的心态看待。任何可疑之处,直接将单元格格式化为任意格式,也许是时间,然后Clear Contents直接在单元格中输入信息。或者按Ctrl-Shift-:输入一个完美的时间并将其编辑为单元格的旧值。现在您知道它肯定是一个时间,并且可以更改相应的数据以使行符合要求,然后查看公式是否已从 0 更改为 1。因此进行检查和逻辑测试。此外,按下F2其中一些并按左箭头返回,仔细观察按下不会将光标向左移动一个字符的键......因为它确实向左移动了一个字符:一个看不见的字符,存在但我们的眼睛看不见。但对 Excel 来说却是显而易见的。

还有很多其他技术可以检查它。此外,虽然这似乎不太可能,但我应该提到大写COUNTIFS()字母“U”与小写字母“u”相同,因此如果“其他字母”描述意味着它们都以 U、D 或 R 开头,只是一些是大写字母,一些是小写字母,那么您会看到所有行都失败,因为该函数认为所有行都不满足 C 列条件。不过,这似乎不太可能。

由于您有非常具体的范围(2:1088 !!!),因此最终更大的想法不太可能,但如果您的实际范围有点太大或大得多,请考虑 2:1088 中的数据只是较旧的数据,不符合标准,因此 0 是正确的结果。

答案3

当您将时间值与文本字符串进行比较时,时间值将始终被视为“小于”文本字符串,即使文本字符串据称表示时间值。

在此处输入图片描述

请注意,D 列中的公式对每一行都返回 TRUE。但是 E 列中的公式对最后一行返回 FALSE,正如您所期望的那样。

因此,只需替换 COUNTIF 末尾引用 15:00 的条件,使得公式如下:

=COUNTIFS($A$2:$A$9,$H$1,$B$2:$B$9,"<>U*",$B$2:$B$9,"<>D*",$B$2:$B$9,"<>R*",$C$2:$C$9,"<"&TIME(15,0,0))

感谢@Rajesh_S 提供的样本数据,并+1,他还提供了 SUMPRODUCT 作为一个良好且可靠的替代方案。

无论您喜欢哪种方法,都必须使用 TIME(小时,分钟,秒) 函数与包含时间的单元格进行比较。

相关内容