Vlookup函数的动态table_array值

时间:2014-03-25 20:21:01

标签: excel

好吧,我想弄清楚以下是否可行,以便我可以在以后的项目中使用它。我一直在示例工作簿中测试和处理此代码,这就是文件名是垃圾的原因。所以不要评判我。

我有VLOOKUP

=VLOOKUP(A6,[dfhdfh.xlsx]Sheet1!$A:$B,2,FALSE)

此功能目前效果很好。但我想将函数中的静态table_array值替换为单元格引用,我可以随意输入不同的文件名。

有些事情:

 =VLOOKUP(A3,CONCATENATE("[",F2,"]","Sheet1!$A:$B"),2,FALSE)

其中F2包含文件名和扩展名dfhdfh.xlsx

但是每当我尝试使用它的嵌套VLOOKUP函数执行CONCATENATE时,我都会遇到#VALUE!错误。是什么给了什么?

1 个答案:

答案 0 :(得分:1)

跟进评论

如果您的工作簿dfhdfh.xlsx始终处于打开状态,则可以使用

=VLOOKUP(A3,INDIRECT("["&F2&"]Sheet1!$A:$B"),2,0)

但如果您的wb已关闭,INDIRECT无法正常工作。在这种情况下,您需要VBA解决方案。


关于您的公式:

1)CONCATENATE(A1,A2)A1 & A2相同。

2)实际上连接工作和CONCATENATE("[",F2,"]","Sheet1!$A:$B")的结果将是"[dfhdfh.xlsx]Sheet1!$A:$B",但是excel不会将此字符串识别为参考。

因此,您需要使用Indirect来实现此目的:
INDIRECT(CONCATENATE("[",F2,"]","Sheet1!$A:$B"))为您提供正确的参考。

整个公式将是:

=VLOOKUP(A3,INDIRECT(CONCATENATE("[",F2,"]","Sheet1!$A:$B")),2,FALSE). 

但是,使用第一点,你可以缩短这个公式:

=VLOOKUP(A3,INDIRECT("[" & F2 & "]Sheet1!$A:$B"),2,FALSE)