0

假设我有一个从 A1 开始并跨越的日期列表...

1/3/2014 2/5/2014 5/5/2015 8/10/2016 ...

我想计算某个月份出现在这个范围内的次数。我目前的解决方案是它下面的行只包含=MONTH(x1)x列在哪里,然后我在该行上调用一个 COUNTIF 。

我不认为这是一个糟糕的解决方案,但它确实需要一大堆额外的单元格来计算我的电子表格中的月份,这对于其他任何事情都不是必需的。

所以基本上,有什么办法可以按照 =COUNTIF(MONTH(range),5) 的方式来计算,例如,某事在 5 月发生的次数?

4

1 回答 1

4

不,你不能这样做,COUNTIF函数需要一个范围作为第一个参数 - 范围上的任何操作(如使用函数)都会将该范围转换为不接受MONTH的数组COUNTIF

可能的替代方法是使用SUMPRODUCT例如

=SUMPRODUCT((MONTH(range)=5)+0)

或者COUNTIFS像这样

=COUNTIFS(range,">="&Z1,range,"<"&EOMONTH(Z1,0)+1)

其中 Z1 是要计算的月份的第一天,例如 2013 年 5 月 1 日

当然 SUMPRODUCT 版本不考虑年份(尽管您可以添加),而 COUNTIFS 则

解释

SUMPRODUCT您使用这样的表达式时MONTH(range)=5,会返回一个值的“数组”,TRUE/FALSE例如{TRUE;FALSE;FALSE;TRUE}.... 但SUMPRODUCT这里只对数字求和,所以我们需要一种方法将 TRUE 强制“强制”为 1,将 FALSE 强制为 0。您可以使用任何不改变值的数学运算,例如 +0, *1 或者你可以在前面添加 -- 像这样:

=SUMPRODUCT(--(MONTH(range)=5))

所以我们得到类似的东西

=SUMPRODUCT(--({TRUE;FALSE;FALSE;TRUE}))

……这就变成了

=SUMPRODUCT({1;0;0;1})

然后 SUMPRODUCT 将这些值相加得到 2,即 5 月的日期数。

SUMPRODUCT 优于SUM纯粹是因为您不需要使用CTRL+ SHIFT+ “数组输入”公式ENTER

有关 SUMPRODUCT 的详细说明,请参见此处,它有很多用途

于 2013-12-09T19:14:52.527 回答