根据日期月份对单元格计数

时间:2018-09-28 10:33:16

标签: excel

我正在尝试计算“每个月的停靠点数”,然后将它们放置在另一个表中,该表包含月头(数据格式)。

我在E5中尝试了许多公式:

  1. = COUNTIFS(A:A;“ = GRP 1”; MONTH(B:B);“ = 1”)
  2. = COUNTIFS(A:A;“ = GRP 1”; MONTH(B:B); = 1)
  3. = COUNTIFS(A:A;“ = GRP 1”; MONTH(B:B);“ MONTH(E4)”)

enter image description here

错误消息如下:

enter image description here

有人有想法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

criteria_range函数的COUNTIFS参数通常需要为range,而不是数组。因此,您的公式将失败。

您可以使用数据透视表。

  • Group Number拖到行区域
  • Date of Stop拖到“列”区域
  • Date of Stop拖到“值”区域
  • 根据需要设置格式

enter image description here

对于公式解决方案,可以使用SUMPRODUCT。您必须排除第一行,或添加其他条件,因为文本输入将导致#VALUE!错误

E5: =SUMPRODUCT(($A$2:$A$200=$D5)*(MONTH($B$2:$B$200)=MONTH(E$4)))

请注意,在结果表中,Date行是实际日期,其格式设置为显示的样子。

enter image description here

或者,如果您的数据在表中,则可以使用结构化引用。

=SUMPRODUCT((Table1[[Group Number]:[Group Number]]=$D5)*(MONTH(Table1[[Date of Stop]:[Date of Stop]])=MONTH(E$4)))

编辑:

作为练习,可以使用整个列引用,如下面的公式所示,进行测试以确保B列条目是日期。

但是,这将大大增加计算时间,并且效率很低。您最好通过以下方式避免这种情况:

  • 不包括第1行,或
  • 使用动态范围参考,或
  • 使用Table和结构化引用

=SUMPRODUCT((IF(ISNUMBER(B:B),A:A,0)=$D5)*(MONTH(IF(ISNUMBER(B:B),B:B,0))=MONTH(E$4)))

由于这是一个数组公式,因此您需要在按下 enter 的同时按住 ctrl + shift 来“确认”它。如果操作正确,Excel将按照公式栏中的说明在公式周围放置括号{...}

答案 1 :(得分:0)

新代码。

认为我们必须对此公式使用EDATE。对于单元格(E5),请尝试以下操作。

=COUNTIFS($A:$A,"GRP "&RIGHT($D5,1),$B:$B,">="&E$4,$B:$B,"<"&EDATE(E$4,1))

基本上,EDATE使您可以提前提前几个月获得相同的日期(例如每月的1号)。在这种情况下,我们将EDATE提前设置为1个月。