【问题标题】:Excel array function for checking monthly values用于检查每月值的 Excel 数组函数
【发布时间】:2014-10-14 03:13:22
【问题描述】:

我有一个数组方程,可以根据另一列 (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 月之外的所有月份。所以你可以看看我是否有复制错误,这里是与一月相关的单元格:

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

有什么想法吗?

【问题讨论】:

  • 显然,当我在 excel 中看到方程式时,我已经完成了 Ctrl + Shift + Enter 并且它们周围有 { }。

标签: excel date if-statement


【解决方案1】:

你的结构有一些问题。

首先,您用于 bins_array 参数的数组是从 MATCH 构造与 IF 语句相结合派生的,它强制 FREQUENCY 返回一个包含 小于 的数组em> 62 个元素。

当这个数组与最初的 IF 子句进行比较时,即 IF(MONTH($B$2:$B$63)=1,它确实包含 62 个元素,你有一个问题,并且,在可能的情况下,Excel 解决两个不同大小数组之间比较的方法是人为地增加两者中较小的一个,使其与较大的数组具有相同的维度。

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

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

最后,任何 IF 子句都应该出现在 within FREQUENCY 结构中,而不是 without

总体:

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

是你应该使用的。

问候

【讨论】:

  • 当然。它可以工作并非不可能,只是不太可能。不客气!
猜你喜欢
  • 2019-08-02
  • 2016-04-07
  • 1970-01-01
  • 2023-03-26
  • 2015-01-11
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多