我正在尝试在 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如果一切仍然令人困惑的话,这仍然是一个很好的解释。)