好吧,我想弄清楚以下是否可行,以便我可以在以后的项目中使用它。我一直在示例工作簿中测试和处理此代码,这就是文件名是垃圾的原因。所以不要评判我。
我有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!
错误。是什么给了什么?
答案 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)