我正在尝试计算必须满足字符串条件的不同事件的实例,然后还根据一个块中的日期时间字符串按时间跨度进行筛选。我需要保持工作表完整,只需在标题工作表中运行该函数即可。这是我的通用公式,当作为数组函数运行时,它只会返回“0”:
=COUNTIFS('SHEET'!$C$2:$C$100,$B5,'SHEET'!$K$2:$K$100,$E$3-LEFT('SHEET'!$K$2:$K$100,12)<8)
此处的 C 列与 B5 中的字符串进行核对。“SHEET”K 列包含 date_time 字符串,日期为前 12 个字符(因此使用 LEFT() 函数)在 E5 中输入报告的日期,以根据 K 列计算时间跨度并检查它是否在一周内(<8)。
通过各种尝试,我发现公式具有典型的“溢出”效果。简单的公式检查文本字符串是有效的。然而,我的麻烦来自于尝试使用复合公式。
我也尝试使用以下作为数组进行相同的计算,但无济于事:
=SUM(IF(AND('SHEET'!$C$2:$C$100=$B$5,$E$3-LEFT('SHEET'!$K2:$K100,12)<8),1,))
提前致谢。
答案1
使用 SUMPRODUCT:
=SUMPRODUCT(('SHEET'!$C$2:$C$100=$B5)*($E$3-LEFT('SHEET'!$K$2:$K$100,12)<8))
这将创建两个 TRUE/FALSE 数组,通过将它们相乘,我们将 TRUE 变成 1,将 FALSE 变成 0。如果其中一个为 FALSE,则该行的结果为 0;如果两个都为 TRUE,则我们得到该行的 1。
然后对得到的 1 和 0 的数组进行求和。
顺便说一句,您的 SUM 公式不起作用,因为 AND() 不适用于数组公式。
它可以重写为:
=SUM(IF(('SHEET'!$C$2:$C$100=$B5)*($E$3-LEFT('SHEET'!$K$2:$K$100,12)<8),1,))
并且根据版本的不同,退出编辑模式时可能需要使用 Ctrl-Shift-Enter 而不是 Enter。