返回Excel数组中的所有非错误行

时间:2017-08-15 15:57:49

标签: arrays excel indexing match

我有一张表(表1),范围D1:F20。在这张表中,我有一系列数据。表1中的几行在列D的单元格中具有#N / A. D1:F1是标题。

我想创建另一个表(表2),它收集表1中的所有数据,除了那些#N / A的行。在我考虑它的时候,我认为这必须是一个数组公式,它将遍历表1中的行,并将那些没有#N / A的那些发布到表2中。

我已经建立了以下公式:

{=INDEX($D$1:$F$20,MATCH(FALSE,ISERROR(D2),0))}

我已经把它变成了一个数组公式,但它没有用。目前,它只是按原样返回表1,即所有行包括#N / A的行。

如何达到预期效果?

1 个答案:

答案 0 :(得分:1)

使用此公式并向下复制以获取列D中的非错误单元格:

=IFERROR(INDEX(D:D,SMALL(INDEX(NOT(ISERROR($D$2:$D$11))*ROW($D$2:$D$11),),SUMPRODUCT(--ISERROR($D$2:$D$11))+ROW(H1))),"")

然后你可以做一个VLOOKUP公式来获取你的D和E列的内容(假设D列的内容是唯一的)。

如果D列的内容不唯一,请复制此公式以获取E和F的内容。

为了提高公式性能,我建议将Sumproduct部分放在它自己的单元格中(这个单元格可以隐藏,甚至可以放在不同的工作表上并隐藏该工作表),这样它只计算一次然后被引用,而不是让每个公式再次计算它。这也可以让您避免使用Iferror,以便在用完有效值时不必计算公式。我们会说Sumproduct公式就像这样放在单元格Z1中:

=SUMPRODUCT(--ISERROR($D$2:$D$11))

然后主要公式变为:

=IF(ROW(A1)>$Z$1,"",INDEX(D:D,SMALL(INDEX(NOT(ISERROR($D$2:$D$11))*ROW($D$2:$D$11),),$Z$1+ROW(A1))))