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

我有一个数组方程,根据另一列(B)中的date字段是否在特定的月份,告诉我列(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值更改为另一个数字时,除了一月份之外的所有月份,它都有效。 所以你可以看看我是否做了一个复制错误,这里是一月份的单元格:

 =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”

任何想法为什么?

你的build设有一些问题。

首先,你用于bins_array参数的数组是从你的MATCH结构和一个IF语句结合而来的,迫使FREQUENCY返回一个包含less于 62个元素的数组。

然后,当这个数组与初始的IF子句(即包含62个元素的IF(MONTH($ B $ 2:$ B $ 63)= 1))进行比较时,您将遇到问题,并且在可能的情况下,两个不同大小的arrays之间的比较是人为地增加两者中较小的一个,以便它们的尺寸等于较大尺寸。

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

在任何情况下,对于bins_array参数,重复MATCH构造都是不必要的,并且强制不必要的额外计算。 因此,我总是惊讶地看到有多less来源仍然推荐这个设置。

最后,任何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)) 

是你应该使用的。

问候