【问题标题】:Possible to use COUNTIF with a function on the range's values?可以将 COUNTIF 与范围值的函数一起使用吗?
【发布时间】:2013-12-27 00:57:29
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: excel anonymous-function countif


    【解决方案1】:

    不,你不能这样做,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 这里只对数字求和,所以我们需要一种方法来“ co-erce" 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“数组输入”公式>

    请参阅here 以获得对 SUMPRODUCT 的良好解释,它有很多用途

    【讨论】:

    • 我打算建议一个数组公式,但 sumproduct 更好。
    • 非常感谢您的回答,一般来说它是有道理的,但是您能解释一下为什么在 SUMPRODUCT 函数的末尾需要“+0”吗?我的猜测是,它类似于将其强制转换为您想要的类型 (int)。这是正确的,还是别的什么?
    • +0 在这种情况下将 TRUE/FALSE 值“强制”为 1/0 值,因为 SUMPRODUCT 仅处理数字 - 我在回答中提供了更详细的解释。
    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多