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

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

我想创build另一个表(表2),收集表1中的所有数据,除了那些有#N / A的行。 正如我想到的,我认为这将是一个数组公式,将循环表1中的行,并张贴到表2中没有#N / A。

我已经build立了以下公式:

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

我已经成为一个数组公式,但它不工作。 目前,它只是按照原样返回表1,即包含所有包含#N / A的行。

我怎样才能达到预期的效果?

使用这个公式并且复制下来从列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的内容。

为了提高公式性能,我build议把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))))