Excel:计算一段时间内的行数

时间:2015-01-05 13:02:53

标签: excel

我有一个包含2列的Excel工作表

A栏=“CA”,“CR”或“IN”

B栏=日期&时间格式DD / MM / YYYY HH:MM

我想对具有此条件的每一行的列底部进行计数:

i)第1-8行=“CA”

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

这是我到目前为止所提出的:

= COUNTIFS(A2:A8,“CA”,B2:B8,右(文字(B2:B8,“hh:mm”),5)>“04:59”),B2:B8,RIGHT( TEXT(B2:B8, “HH:MM”),5)< “17:00”)

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

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

由于

3 个答案:

答案 0 :(得分:3)

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 那么就改变这一部分)。

最后两个条件的+'或者是两个条件,然后整个事情与第一个条件'和'。

答案 1 :(得分:1)

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

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

我假设您想要 <{strong> 04:5917:00之间的 - 在您的观点中ii)您显示与您的公式中相反的方式

MOD从日期/时间中提取时间,以便与时间范围进行比较。如果您的计数范围包括整个小时,例如5到16(包括5和16),您可以使用HOUR函数而不使用MOD,即

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

答案 2 :(得分:1)

您根本不需要处理字符串。 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等其他功能相结合。)
  4. PS:正如巴里·胡迪尼指出的那样,OP要求两个相反的时间范围。我选择了其中一个。