将计算的范围替换为查找

时间:2016-08-24 10:41:29

标签: excel

在单元格F3的内容中,我有以下公式(在当前行上取一个值并在另一个工作表中查找,根据找到的位置返回一个范围):

="'OBS Procedures'!" & ADDRESS(MATCH(INDIRECT(ADDRESS(ROW(),1)),'OBS Procedures'!A:A,0),3) & ":" & ADDRESS(MATCH(INDIRECT(ADDRESS(ROW(),1)),'OBS Procedures'!A:A,0),50)

输出文本:'OBS Procedures'!$C$1:$AX$1

到目前为止一切都很好。

我有另一个单元格(输出由单元格F3生成的最右边的填充单元格):

=LOOKUP(2,1/(INDIRECT(F3)<>""),INDIRECT(F3))

这应该是文本的输出: 5:18/07/2016

但我想完全摆脱单元格F3,并将F3的公式合并到上面的第二个公式中。

只需在第二个F3之间复制INDIRECT()公式即可。但是将其复制到第一个F3会生成#N/A

具体来说:

=LOOKUP(2,1/(INDIRECT("'OBS Procedures'!" & ADDRESS(MATCH(INDIRECT(ADDRESS(ROW(),1)),'OBS Procedures'!A:A,0),3) & ":" & ADDRESS(MATCH(INDIRECT(ADDRESS(ROW(),1)),'OBS Procedures'!A:A,0),50))<>""),INDIRECT(F3))

生成#N/A

甚至

=LOOKUP(2,1/(INDIRECT("'OBS Procedures'!$C$1:$AX$1")<>""),INDIRECT(F3))

并生成我期望的

(保留中间单元格或在VBA中执行此操作,这是我通常不仅仅是简单公式的选择,在这种情况下不是一个选项)

我根本就没有看到我在这里做错了什么 - 有人可以开导我吗? :)

1 个答案:

答案 0 :(得分:0)

正如我在评论中所暗示的那样,我不敢说你目前正在使用的建筑确实非常糟糕,而且可以用非易失性的设置代替。高效。

错误的原因是由于您使用ROW功能的方式。实际上,为了以这种方式生成增量整数,ROW由于多种原因而不如ROWShttps://excelxor.com/2014/08/25/row-vs-rows-for-consecutive-integer-generation/)。

尽管在这方面有劣势,但这通常不会导致错误。在这里,你有点不幸,由于你的构造的性质,Excel期望从该部分的数组输出:

ROW()

因此,并且为了论证我们正在讨论的公式是在第1行,这部分:

ADDRESS(ROW(),1)

在不同情况下,评估为:

"$A$1"

此处评估为:

{"$A$1"}

因为LOOKUP正在向整个结构提供必要的数组强制,因此ROW()部分预期会传递数组输出,尽管只包含一个值。实际上,在这里(您可以通过使用评估公式功能看到这一点),此部分评估为(对于第1行),而不是1,而是{1}。< / p>

所以这里:

INDIRECT(ADDRESS(ROW(),1))

是:

INDIRECT({"$A$1"})

因为,一般来说,INDIRECT无法解析值数组(虽然这可以通过进一步的操作来实现),这部分错误。

为避免这种情况,您可以使用ROWS,例如(第1行):

ADDRESS(ROWS($1:1),1)

或者通过一些合适的附加功能将ROW的数组输出强制转换为非数组类型,例如: SUM,即:

ADDRESS(SUM(ROW()),1)

那就是说,我真的认为你需要在这里重新考虑你的整个方法。例如,这个:

=LOOKUP(2,1/(INDEX('OBS Procedures'!$C:$AX,MATCH(A1,'OBS Procedures'!A:A,0),)<>""),INDEX('OBS Procedures'!$C:$AX,MATCH(A1,'OBS Procedures'!A:A,0),))

假设在第1行,相当于你的:

=LOOKUP(2,1/(INDIRECT("'OBS Procedures'!" & ADDRESS(MATCH(INDIRECT(ADDRESS(ROW(),1)),'OBS Procedures'!A:A,0),3) & ":" & ADDRESS(MATCH(INDIRECT(ADDRESS(ROW(),1)),'OBS Procedures'!A:A,0),50))<>""),INDIRECT(F3))

(再次假设在第1行),不仅不需要先前构造表示范围的文本字符串,而且也简洁,重要的是,非易失性。

此致