【问题标题】:How can I remove 0s from an array within an INDEX formula?如何从 INDEX 公式中的数组中删除 0?
【发布时间】:2018-11-29 23:16:11
【问题描述】:

我在这里写了一个复杂的INDEX 公式,我真的很接近解决方案。

  • 下面的INDEX 根据两个条件匹配数组的行 以及基于其他地方的字符串的列。
  • 我正在使用ROW 函数来模拟MATCH 函数以传递给INDEX, 和N(IF()) 取消引用INDEX 函数并将值数组传递给 MIN 函数。
  • 我使用ROW 而不是MATCH 因为MATCH(1,,) 只会返回 第一个值为 6 TRUE,由这两个条件得出。

除了一个问题外,这一切都有效:我在N(IF(1,ROW())) 之后传递给INDEX 的数组仍然有一堆0。例如,它得到 "{0,0,0,0,22,23,24,0,0)" 所以INDEX 传递了 "{54,54,54,54,87,91,78,54,54 }" 到 MIN 函数。

因此我的问题。我觉得我真的很接近答案,但我被卡住了。如果我能以某种方式从数组中删除 0,以便只将“{22,23,24}”传递给INDEX,那么我的工作表中的一切都会正常工作。

=IF($H$9="","",
  MIN(INDEX($A$9:$Z$5000,
    N(IF(1,ROW($A$1:$A$4991)*(M$3=$H$9:$H$5000)*($X$6=$A$9:$A$5000))), 
    MATCH($H4&CHAR(10)&CHAR(10)&CHAR(10)&$V$3&CHAR(10)&"(lbs)",$A$8:$Z$8,0))))

【问题讨论】:

  • 请注意:由于您使用$A$9:$Z$5000 作为索引范围并返回行号,因此您的数据将关闭。索引需要一个相对位置而不是行号。因此,如果该区域的第一行符合您的条件,它将返回 9 到索引,该索引将返回位于范围第 9 行的值或 A17:Z17
  • 好收获!谢谢,修正了问题中的错字。

标签: excel


【解决方案1】:

使用 MIN(IF()) 代替构建数组

=IF($H$9="","",MIN(IF((M$3=$H$9:$H$5000)*($X$6=$A$9:$A$5000)*(INDEX($A$9:$Z$5000,0,MATCH($H4&CHAR(10)&CHAR(10)&CHAR(10)&$V$3&CHAR(10)&"(lbs)",$A$8:$Z$8,0))<>0),INDEX($A$9:$Z$5000,0,MATCH($H4&CHAR(10)&CHAR(10)&CHAR(10)&$V$3&CHAR(10)&"(lbs)",$A$8:$Z$8,0)))))

这是一个数组公式,退出编辑模式时必须使用 Ctrl-Shift-Enter 确认,而不是 Enter。


Office 365 更简单:

=IF($H$9="","",MINIFS(INDEX(A:Z,0,MATCH($H4&CHAR(10)&CHAR(10)&CHAR(10)&$V$3&CHAR(10)&"(lbs)",$8:$8,0)),INDEX(A:Z,0,MATCH($H4&CHAR(10)&CHAR(10)&CHAR(10)&$V$3&CHAR(10)&"(lbs)",$8:$8,0)),"<>0",$H:$H,$M$3,$A:$A,$X$6))

【讨论】:

  • 绝对不可思议,成功了!我花了几个小时试图弄清楚这一点,非常感谢!我非常专注于尝试为 INDEX 函数指定引用,我没有想到将 INDEX 作为列传递并检查它之外的条件。干净多了。再次感谢 Scott,你今天教了我一个新技巧。
  • 嘿,Scott,今天早上再次查看建议的解决方案,效果很好,但在观看评估后我确实有一个问题:第一个 INDEX()0 术语的用途是什么?似乎只是检查数据列中没有任何0,是吗?
  • 我读它的方式是你想从 MIN 中排除 0,但现在我重读了,你在 INDEX 中得到了 0,它可以被删除。
猜你喜欢
  • 1970-01-01
  • 2013-05-10
  • 2020-11-11
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2020-11-30
  • 1970-01-01
  • 2014-09-05
相关资源
最近更新 更多