Excel:计算一个时间段内有多少行

Excel: Counting how many rows fall within a time period

我有一个 excel sheet 有 2 列

A 列 = "CA"、"CR" 或 "IN"

B 列 = 日期和时间格式 DD/MM/YYYY HH:MM

我想在符合以下条件的每一行的底部进行计数:

i) 第 1-8 行 = "CA"

ii) 第 1-8 行需要检查时间范围,即 > "17:00" 和 < "04:59"

这是我到目前为止的想法:

=COUNTIFS(A2:A8,"CA",B2:B8,RIGHT(文本(B2:B8,"hh:mm"),5)>"04:59") , B2:B8,RIGHT(文本(B2:B8,"hh:mm"),5)<"17:00")

我认为在文本函数中使用范围是错误的,但不知道如何解决这个问题。

因为 B 列采用日期和时间格式,我必须在函数中将其更改为字符串,以便我可以只对时间进行测试 - 也许有更好的方法?)

谢谢

COUNTIFS 的问题是您不能对条件进行大量操作。你可以插入一个只包含时间的列,在这种情况下你可以使用 COUNTIFS 但如果你不能,你可以使用 SUMPRODUCT 代替:

=SUMPRODUCT((A1:A6="CA")*(((TEXT(B1:B6,"hh:mm")*1>TIME(17,0,0))+(TEXT(B1:B6,"hh:mm")*1<TIME(5,0,0)))>0))

这在示例范围 A1:B6:

上应用了一些条件

(A1:A6="CA") 确保该行有 CA,

(TEXT(B1:B6,"hh:mm")*1>TIME(17,0,0)) 确保时间在17:00

之上

(TEXT(B1:B6,"hh:mm")*1<TIME(5,0,0)) 确保时间在 05:00 之前(你的问题中有 4:59,如果你的意思是 小于 4:59 然后更改这部分)。

最后两个条件的 + 对这两个条件进行“或”运算,然后整个过程与第一个条件进行“与”运算。

这很难用 COUNTIFS 做到,因为你不能用函数修改范围.....但你可以用 SUMPRODUCT 做到这一点 - 试试这个

=SUMPRODUCT((A2:A8="CA")*(MOD(B2:B8,1)<"17:00"+0)*(MOD(B2:B8,1)>"04:59"+0))

我假设你想要 between 04:59 and 17:00 - 在你的第 ii) 点中,你展示的方式与你所拥有的相反在你的公式中

MOD 从 date/time 中提取时间,因此可以将其与时间范围进行比较。如果您在包括整小时在内的范围内计数,例如5 到 16(含)您可以使用 HOUR 函数而不使用 MOD,即

=SUMPRODUCT((A2:A8="CA")*(HOUR(B2:B8)>=5)*(HOUR(B2:B8)<=16))

暂时不需要处理字符串。 Excel 提供了相当多的日期和时间函数,足以满足您的需求。

一个简洁的公式就是

=SUMPRODUCT((A1:A8="CA")*(MOD(B1:B8,1)<=TIME(17,0,0))*(MOD(B1:B8,1)>TIME(4,59,0)))

备注:

  1. 我假设你的意思是 <=17:00,而不是 <17:00。如果我错了,很容易修改公式。
  2. 您使用了 A2:A8,但您可能需要 A1:A8,根据文本。如果我错了,很容易修改公式。
  3. COUNTIFS 通常不如 SUMPRODUCT 灵活(结合其他函数如 MATCHINDEXSUM 等)

PS:正如 barry houdini 指出的那样,OP 要求两个相反的时间范围。我在这里选择了其中之一。