2017-04-26 45 views
1

我有一个数组公式,它输出的范围不是0或文本的所有值。在某个点后输出列中的单元格的数组

这个范围主要是数字和文本的一个单元格,它是描述性标题。

但是,我只需要检测列中存在的文本(这可能在单元格AA4中,或者可能是AA40,每次都不相同)才开始输出,并且只输出此后的数字点。

例如,给定列中的以下内容:

525 
0 
22 
464 
Type 
233 
0 
453 
665 

只有数字233,453,665应当是由阵列的输出。

目前它只是查看范围并输出任何不是0或文本的内容,而不管它是在标题文本的上面还是下面。所以525,22464,233,453,665都会在此刻输出。

=IFERROR(INDEX($AA$4:$AA$978, SMALL(IF($AA$4:$AA$978<>0, ROW($AA$4:$AA$978)-MIN(ROW($AA$4:$AA$978))+1, ""), ROW(A1))),"") 

我需要更改/添加以执行此任务吗?

回答

4

A value_if_falseIF声明中的子句不是严格必要的。另外,ROWSROW更加严格,对于SMALLk参数(关于为什么,请参阅here的解释)。

您需要:

=IFERROR(INDEX($AA$4:$AA$978,SMALL(IF($AA$4:$AA$978<>0,IF(ROW($AA$4:$AA$978)-MIN(ROW($AA$4:$AA$978))+1>MATCH("Type",$AA$4:$AA$978,0),ROW($AA$4:$AA$978)-MIN(ROW($AA$4:$AA$978))+1)),ROWS(A$1:A1))),"")

除非你真的使用Excel表,我可能会修改一些在上面所以引用,以使其更有效率,即:

=IFERROR(INDEX($AA:$AA,SMALL(IF($AA$4:$AA$978<>0,IF(ROW($AA$4:$AA$978)>MATCH("Type",$AA:$AA,0),ROW($AA$4:$AA$978))),ROWS(A$1:A1))),"")

随着一系列不到一千格的,你可能罚款继续使用IFERROR设置,但要注意的是,对于较大的范围,这可能是极其ineffici ent - 给出解释和备选设置here

Regards

+0

按预期工作。但是,我错过了最后一行数据。考虑到上面的例子,除非我将所有'$ AA $ 978'设置为'$ AA $ 979',否则将会出现665。然而,979行是空白的,665行是978行。为什么会发生这种情况? – Aurelius

+0

恐怕你的评论没有多大意义。您是否使用了公布的精确版本? –

1

试试这个Array Formula这需要一个特殊的键击Ctrl+Shift+Enter而不是单独输入。

=IFERROR(INDEX(INDEX($AA$4:$AA$978,MATCH(TRUE,ISTEXT($AA$4:$AA$978),0)+1):$AA$978,SMALL(IF(INDEX($AA$4:$AA$978,MATCH(TRUE,ISTEXT($AA$4:$AA$978),0)+1):$AA$978<>0,ROW(INDEX($AA$4:$AA$978,MATCH(TRUE,ISTEXT($AA$4:$AA$978),0)+1):$AA$978)-ROW(INDEX($AA$4:$AA$978,MATCH(TRUE,ISTEXT($AA$4:$AA$978),0)+1))+1),ROWS(A$1:A1))),"") 

并将其复制下来。

+0

如果您使用CSE进行提交,那么额外的强制INDEX函数是多余的。 –

+0

好的。我删除了第一个,但忘记删除后面的事件。 :) – sktneer

相关问题