最后一个非空白列

时间:2015-01-19 12:40:40

标签: excel formulas excel-indirect

我发现以下公式在Excel中的同一工作表中搜索时效果很好。因此,当我希望excel返回第3行中的最后一个值时,此公式有效。

 ={INDIRECT(ADDRESS(3,MAX((3:3<>"")*COLUMN(3:3)),1))}

当我希望excel返回不同工作表的第3行中的最后一个值时,我很难使用它。有人可以帮忙吗?

由于 RP

1 个答案:

答案 0 :(得分:0)

在这种情况下不需要INDIRECT。

要处理不同的工作表,您必须在单元格地址中引用工作表。

{=INDEX(Sheet1!3:3,,MAX((Sheet1!3:3<>"")*COLUMN(Sheet1!3:3)))}

不使用数组公式,可以通过以下方式实现:

=INDEX(Sheet1!3:3,,LOOKUP(2,1/(Sheet1!3:3<>""),COLUMN(Sheet1!3:3)))

但这是基于一个奇怪的没有真正记录的LOOKUP行为,它采用{1; #DIV / 0; 1; 1; #DIV / 0}作为排序数组。

INDEX变体返回单元格引用。所以我们可以构建动态范围,如:

Sheet1!A3:INDEX(Sheet1!3:3,,LOOKUP(2,1/(Sheet1!3:3<>""),COLUMN(Sheet1!3:3)))

如果您只对最后一个值感兴趣

=LOOKUP(2,1/(Sheet1!3:3<>""),Sheet1!3:3)

也足够了。但这只返回值,而不是引用。

在这种情况下,数组公式的优缺点是:

亲:它的工作原理就像记录在案一样。 (Sheet1!3:3&lt;&gt;&#34;&#34;)返回TRUE或FALSE,TRUE * COLUMN(Sheet1!3:3)返回COLUMN(Sheet1!3:3),而FALSE * COLUMN(Sheet1!3) :3)得到0.因此MAX是最大的列号(Sheet1!3:3&lt;&gt;&#34;&#34;)。

con:很慢。在这种情况下不可用,因为我们只对连续的所有单元格起作用。但是如果我们将它应用于列中的所有单元格,那么它将无法使用缓慢。