2014-03-25 19 views
1

好吧,我想弄清楚下面是否可能,以便我可以在以後的項目中使用它。我一直在示例工作簿中測試和處理此代碼,這就是文件名稱爲垃圾的原因。所以不要評價我。Vlookup函數的動態table_array值

我有一個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

如果您的工作簿'dfhdfh.xlsx'始終是敞開的,你可以使用'= VLOOKUP(A3,INDIRECT( 「[」 F2& 「] Sheet 1中$ A:$ B」),2,0)'。但是如果你的wb關閉了,'INDIRECT'不起作用。在這種情況下,你需要vba –

+0

謝謝,我很欣賞解決方法。你能解釋爲什麼concatenate函數在這裏不起作用嗎?這就是我真正想要的 – FluffyKittens

+1

首先,「CONCATENATE(A1,A2)」與「A1&A2」相同。其次,實際上concatenation的作品和'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)' –

回答

2

從評論

跟進如果工作簿中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)