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)))
备注:
- 我假设你的意思是
<=17:00
,而不是 <17:00
。如果我错了,很容易修改公式。
- 您使用了 A2:A8,但您可能需要 A1:A8,根据文本。如果我错了,很容易修改公式。
COUNTIFS
通常不如 SUMPRODUCT
灵活(结合其他函数如 MATCH
、INDEX
、SUM
等)
PS:正如 barry houdini 指出的那样,OP 要求两个相反的时间范围。我在这里选择了其中之一。
我有一个 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)))
备注:
- 我假设你的意思是
<=17:00
,而不是<17:00
。如果我错了,很容易修改公式。 - 您使用了 A2:A8,但您可能需要 A1:A8,根据文本。如果我错了,很容易修改公式。
COUNTIFS
通常不如SUMPRODUCT
灵活(结合其他函数如MATCH
、INDEX
、SUM
等)
PS:正如 barry houdini 指出的那样,OP 要求两个相反的时间范围。我在这里选择了其中之一。