【问题标题】:Apply functions like MEDIAN to individual elements in an array formula - Excel将 MEDIAN 等函数应用于数组公式中的单个元素 - Excel
【发布时间】:2018-10-20 12:32:00
【问题描述】:

我正在使用 MEDIAN 函数来计算两个日期范围的重叠。 公式看起来像这样

=MEDIAN(A18,C18+1,$C$8+1)-MEDIAN(A18,C18+1,$B$8)

A18 & C18 是日期范围 1

B8 & C8 是日期范围 2

我想把它变成一个类似这样的数组公式来对多行的结果求和

{=SUM(MEDIAN(A18:A24,C18:C24+1,$C$8+1)-MEDIAN(A18:24,C18:24+1,$B$8))}

这仅在 MEDIAN 单独应用于数组 A18:A24C18:C24 中的每个元素时才有效。

目前,Excel 连接每个 MEDIAN 调用中包含的数组并返回整体中位数,只留下一个值供 SUM 求和。这就是我需要做的“错误”结果。

有没有办法强制 excel 将 MEDIAN 应用于我的数组中的每个元素?即有没有办法强制excel从MEDIAN函数返回一个数组。

如果可能的话,它可以让我避免使用 120,000 个元素的数组或启用宏的工作簿。

【问题讨论】:

  • 您可以插入另一列并在其中添加您的公式 =MEDIAN(A18,C18+1,$C$8+1)-MEDIAN(A18,C18+1,$B$8) 然后应用此列的总和
  • 不,很遗憾,您不能强制 MEDIAN 返回一个值数组。理论上应该可以将AGGREGATE160.5function_numk 参数一起使用,尽管它似乎不接受必要的构造(使用INDIRECTOFFSET ) 将多个范围作为其array 参数传递。如果您愿意,我可以为您提供一个单细胞数组公式解决方案,尽管它必然是复杂的并且可能会占用大量资源。因此,除非您强烈反对 @usmanhaq 提出的解决方案,否则我建议您采用这种方法。
  • 是的,反对意见是在我的情况下,列方法导致了 120,000 个单元格数组,这将文件大小推高到足以令人讨厌的程度。 B8 和 C8 沿另一个维度变化。 (我工作表中的单元格引用与此处不同)
  • 事后看来应该使用更有意义的引用(我只是从工作表的不同部分提取公式,我也使用它)。在 C8 和 B8 固定的地方,使用列绝对有意义。
  • 那么在您的实际设置中,正在处理的范围有多大?比这里给出的更大(第 18 到 24 行),我想?如果它们不是太大,那么在不使用额外的辅助列的情况下,可能仍然值得考虑使用单细胞解决方案。

标签: excel excel-formula array-formulas


【解决方案1】:

MEDIAN 公式。但是您不能将MEDIAN 用于数组公式,因为MEDIAN 总是返回单个 结果(不是数组)。

我有一个解决您的问题的方法,但它有点迟钝/重复:

(我在公式右侧加入了 cmets 来解释发生了什么)

= IF(C18:C24>C8,     // (For each cell in C18:C24) If the value is greater than C8
     C8,             // Then C8 is the upper bound
     C18:C24)        // Else, the specific value from C18:C24 is the upper bound
  -                  // (minus sign)
  IF(A18:A24<B8,     // (For each cell in A18:A24) If the value is less than B8
     B8,             // Then B8 is the lower bound
     A18:A24)        // Else, the specific value from A18:A24 is the lower bound

这会返回一个日期范围重叠的数组除了这些结果可能会返回负数(如果没有发生重叠),但在这种情况下,您想返回0

您可以使用另一个IF 语句来解决这个问题。

= IF(formula < 0, 0, formula)

formula 是我上面的第一个公式。

旁注:通常在这种情况下,您可以避免输入两次formula,如下所示:

= MAX(formula,0)

除非当formula 本身返回一个数组时这不起作用,因为MAX 只返回一个结果。这是您在使用 MEDIAN 时遇到的类似问题。

总而言之,没有cmets,这是总结值的公式:

= SUM(IF((IF(C18:C24>C8,C8,C18:C24)-IF(A18:A24<B8,B8,A18:A24))<0,0,
          IF(C18:C24>C8,C8,C18:C24)-IF(A18:A24<B8,B8,A18:A24)))

当然,这是一个数组公式,必须用Ctrl+Shift+Enter而不是Enter.

【讨论】:

  • 干杯伙伴。很高兴确认没有办法让 MEDIAN 像我需要的那样运行。我知道会有一个涉及 IF 的解决方案,为将一个放在一起而欢呼。毫无疑问,它将帮助其他在这里找到自己的人。我也许可以稍微简化一下我的具体问题,以阻止 IF 公式过于疯狂
  • 是的,很多 Excel 函数,如 ORANDMEDIANMAXMIN(仅举几例)不幸的是通常不适用于数组公式,因为它们总是只返回一个标量结果。无论如何,如果此答案对您有帮助,我将不胜感激您通过在其旁边打勾将其标记为正确。
  • 嗨@mechcaptain。可能有 4 种可能性 (1) 日期范围 A 完全在日期范围 B 之前 (2) 日期范围 A 完全在日期范围 B 之前 (3) 日期范围 A 在日期范围 B 之前但重叠 (4) 日期范围 A 在在日期范围 B 之前但重叠。我认为你只满足了其中两个
  • @usmanhaq 我考虑了所有四种可能性。 IF 语句分别确定上限和下限。
猜你喜欢
  • 1970-01-01
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2017-12-06
相关资源
最近更新 更多