尝试在 Excel 中按日历季度对数据进行排序和计数

尝试在 Excel 中按日历季度对数据进行排序和计数

我正在尝试在 excel 中设置一个公式,该公式将查看 c7:c30 中指定日期、L7:L30 中类别为“活动-A”和“已完成-C”的数据范围。我试图让 excel 单独查看每一行,并比较日期是否在指定的季度日期 1/1/12 (B38) 和 3/31/12 (C38)(一年的第一季度)之间,如果满足此条件,则计算标记为“A”表示活动的数据。

我想出了以下不起作用的方法,因为它只查看指定的第一个日期,如果第一个日期符合第一季度的规范,则计算所有标记为“A”的日期。

{=(IF(($C$7:$C30>=$B$39)*($C$7:C$30<=$C$39),COUNTIF($L$7:$L30,"a"),0))}

请帮我找出这个公式的问题所在,它不会单独查看每一行,而是如果第一个日期与所呈现的 if 语句相符,则计算用 A 表示的所有内容。

抱歉,我不擅长 Excel,如果能提供任何帮助我将不胜感激。

谢谢!

答案1

我认为您可能对数组公式的结构有问题。只需解开语句,您将构建一个包含与您拥有的行数相同的数组,每行包含 COUNTIF($L$7:$L30,"a") 的结果(如果满足日期条件),否则为 0。

由于您没有应用任何计数函数来包装所有内容,因此该函数将返回整个数组,但您只会看到单元格中的第一个结果,这就是为什么它似乎纯粹由一个单元格控制。

解决这个问题的另一种方法如下:

您的三个测试(针对每一行)是:

  • 日期 >= B38
  • 日期 <= C38
  • 条件 = “a”

并且您只想计算所有三个都为真的地方。

方便的是,真值为 1,假值为 0,因此我们可以使用乘法运算来得到您想要的结果。

因此,对于单行,您需要执行以下操作

(C7 >= B38) * (C7 <= C38) * (L7="a")

(显然,将其扩展到 C7:C30 等以覆盖您感兴趣的行)

然后为了将其折叠为单个值,您需要将所有内容包装在 SUM() 语句中,该语句将遍历列表并将所有值加在一起。

SUM( (C7:C30>B39) * (C7:C30<=C39) * (L7:L30="a") )

另外,如果您很好奇,请回到您的原始公式,并用 sum() 语句将其包装起来,您将得到结果,显示为您的状态设置为“a”的次数,乘以满足日期条件的行数。

(注意:数组公式一开始需要花点时间思考,但一旦你理解了它们,它们就会很好地工作。我最初是在http://www.cpearson.com/excel/ArrayFormulas.aspx如果一切仍然令人困惑的话,这仍然是一个很好的解释。)

相关内容