我发现以下公式在Excel中的同一工作表中搜索时效果很好。因此,当我希望excel返回第3行中的最后一个值时,此公式有效。
={INDIRECT(ADDRESS(3,MAX((3:3<>"")*COLUMN(3:3)),1))}
当我希望excel返回不同工作表的第3行中的最后一个值时,我很难使用它。有人可以帮忙吗?
由于 RP
答案 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:很慢。在这种情况下不可用,因为我们只对连续的所有单元格起作用。但是如果我们将它应用于列中的所有单元格,那么它将无法使用缓慢。