我正在尝试计算有多少个单元格不以 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
答案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(小时,分钟,秒) 函数与包含时间的单元格进行比较。