用于检查月度值的Excel数组函数

时间:2014-10-14 03:13:23

标签: excel date if-statement

我有一个数组方程式,根据另一列(B)中的日期字段是否在特定月份,告诉我列(D)中唯一值的数量。

我的等式是:

=SUM(IF(MONTH($B$2:$B$63)=10,(IF(FREQUENCY(IF(LEN(D2:D63)>0,MATCH(D2:D63,D2:D63,0),""), IF(LEN(D2:D63)>0,MATCH(D2:D63,D2:D63,0),""))>0,1))),0)

这适用于10月份,当我将10值更改为另一个数字时,它适用于除1月以外的所有月份。因此,您可以看到我是否在复制错误,这是与1月相关的单元格:

=SUM(IF(MONTH($B$2:$B$63)=1,(IF(FREQUENCY(IF(LEN(D2:D63)>0,MATCH(D2:D63,D2:D63,0),""), IF(LEN(D2:D63)>0,MATCH(D2:D63,D2:D63,0),""))>0,1))),0)

这总是返回“N / A”

任何想法为什么?

1 个答案:

答案 0 :(得分:1)

你的建筑有些问题。

首先,用于 bins_array 参数的数组,它是从MATCH结构和IF语句中派生而来的,它强制FREQUENCY返回一个包含小于 62个元素。

然后将此数组与初始IF子句进行比较,即IF(MONTH($ B $ 2:$ B $ 63)= 1,其中 包含62个元素,则存在问题,并且在可能的情况下,Excel解析两个不同大小的数组之间的比较的方法是人为地增加两者中较小的一个,使其尺寸等于较大的尺寸。

当然,在这样做时,它会用#N / As填充缺失的值(它还能做什么?)。因此你的结果。

在任何情况下, bins_array 参数都不需要重复MATCH构造,并强制进行不必要的额外计算。因此,我总是惊讶地看到有多少人仍然推荐这种设置。

最后,任何IF条款都应该出现在的FREQUENCY结构中,而不是没有

总体:

=SUM(IF(FREQUENCY(IF(LEN(D2:D63)>0,IF(MONTH($B$2:$B$63)=1,MATCH(D2:D63,D2:D63,0))),ROW(D2:D63)-MIN(ROW(D2:D63))+1),1))

是您应该使用的。

此致