INDIRECT函数指定外部参考文件

时间:2015-05-01 14:16:24

标签: excel

我正在使用此公式查找工作表中最后一个有效条目的行号:

= SUMPRODUCT(MAX((ROW([A17U.SI.csv] A17U.SI A:A))*([A17U.SI.csv] A17U.SI答:!A<>" ")))

我有一个包含多个值的列表,包括" A17U.SI.csv"和" A17U.SI"。是否可以引用具有INDIRECT功能的那些?

此外,参考A:A不应该成为一个字符串(& A:A),它应该保持动态,所以我可以将它拖到其他列。

感谢您的任何意见。

1 个答案:

答案 0 :(得分:1)

=SUMPRODUCT(MAX((ROW(INDIRECT("'[" & A3 & "]" & B3 & "'!" & SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","") & ":" &  SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1",""))))*(INDIRECT("'[" & A3 & "]" & B3 & "'!"  & SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","") &":" & SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","") )<>"")))

基本上,您只需要通过INDIRECT函数使现有公式动态化。使用它时,您只需确保使用单引号,括号和感叹号来使语法有效。您的目标只是在原始公式中重现您在其中硬编码的内容。

你问题的棘手部分实际上是需要一个动态范围引用,这使得公式更加丑陋,因为我们不得不包含这个来以一种动态更新的方式获取范围的字母:

SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")

例如,如果您将上述公式单独放在A列的任何单元格中,它将评估为“A”。如果你可以把它放在列中自己的单元格中,那么你可以简单地引用那个单元格,它会使公式更容易阅读。例如,如果我们将=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")放在单元格A1中,那么我们可以写:

=SUMPRODUCT(MAX((ROW(INDIRECT("'[" & A3 & "]" & B3 & "'!" & A1 & ":" &  A1)))*(INDIRECT("'[" & A3 & "]" & B3 & "'!"  & A1 &":" & A1 )<>"")))

您在INDIRECT中使用SUMPRODUCT时询问了语法。当涉及SUMPRODUCT时,如果我们正确地写了INDIRECT部分,那么它的语法应该与您已有的语法不同。