Excel:计算一段时间内有多less行
我有一个2列的Excel表
列A =“CA”,“CR”或“IN”
B列=date和时间格式DD / MM / YYYY HH:MM
我想在每个具有这个标准的行的列底部进行计数:
i)第1-8行=“CA”
ii)第1-8行需要检查时间范围,即“17:00”和“04:59”
这是我到目前为止:
(B2:B8,“右”(文本(B2:B8,“hh:mm”),5)>“04:59”),B2:B8,RIGHT(文本(B2: B8, “HH:MM”),5)< “17:00”)
我认为在文本函数内使用范围是错误的,但不知道如何解决这个问题。
因为B列是date和时间格式,所以我不得不将它更改为函数内的一个string,这样我可以在时间上进行testing – 也许还有更好的办法?)
谢谢
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
做的,因为你不能用function修改范围…..但你可以用SUMPRODUCT
来做到这一点 – 试试这个
=SUMPRODUCT((A2:A8="CA")*(MOD(B2:B8,1)<"17:00"+0)*(MOD(B2:B8,1)>"04:59"+0))
我假设你想在 04:59
和17:00
之间 – 就你而言,ii)你performance出与你的公式中的相反的方式
MOD
从date/时间中提取时间,以便与时间范围进行比较。 如果在包括整个小时的范围内计数,例如5到16,则可以使用没有MOD
HOUR
函数,即,
=SUMPRODUCT((A2:A8="CA")*(HOUR(B2:B8)>=5)*(HOUR(B2:B8)<=16))
你根本不需要处理string 。 Excel提供了相当多的date和时间function,足够你的情况。
一个简洁的公式是
=SUMPRODUCT((A1:A8="CA")*(MOD(B1:B8,1)<=TIME(17,0,0))*(MOD(B1:B8,1)>TIME(4,59,0)))
笔记:
- 我假设你的意思是
<=17:00
<17:00
,而不是<17:00
。 如果我错了,修改公式很容易。 - 您使用了A2:A8,但是您可能想按照文本A1:A8。 如果我错了,修改公式很容易。
-
COUNTIFS
通常比SUMPRODUCT
灵活得多(与MATCH
,INDEX
,SUM
等其他函数结合使用)
PS:正如Barry Houdini指出的,OP要求两个相反的时间范围。 我在这里select了其中一个。