在某個工作表單元格區域中查找值時,我們通常都會使用VLOOKUP函數。但是,如果在多個工作表中查找值并返回第一個相匹配的值時,可以使用VLOOKUP函數嗎?本文將解這個技術。
最簡單的解決方案是在每個相關的工作表中使用輔助列,即首先將相關的單元格值連接并放置在輔助列中。然而,有時候我們可能不能在工作表中使用輔助列,特別是要求在被查找的表左側插入列時。因此,本文會提供一種不使用輔助列的解決方案。
下面是3個示例工作表:
:主工作表Master
數組公式如下:
=VLOOKUP($A3,INDIRECT(“‘”&INDEX(Sheets,MATCH(TRUE,COUNTIF(INDIRECT(“‘”&Sheets&”‘!B:B”),$A3)>0,0))&”‘!B1:D10″),3,0)
其中,Sheets是定義的名稱:
名稱:Sheets
引用位置:={“Sheet1″,”Sheet2″,”Sheet3”}
在公式中使用的VLOOKUP函數與平常并沒有什么不同,我們首先需要確定在哪個工作表中進行查找,因此我們使用的函數應該能夠操作三維單元格區域,而COUNTIF函數就可以。公式中的:
COUNTIF(INDIRECT(“‘”&Sheets&”‘!B:B”),$A3)
轉換為:
COUNTIF(INDIRECT(“‘”&{“Sheet1″,”Sheet2″,”Sheet3″}&”‘!B:B”),$A3)
轉換為:
COUNTIF(INDIRECT({“‘Sheet1’!B:B”,”‘Sheet2’!B:B”,”‘Sheet3’!B:B”}),$A3)
INDIRECT函數指令Excel將這個文本字符串數組中的元素轉換為單元格引用,然后傳遞給COUNTIF函數,同時單元格A3中的值作為其條件參數,這樣上述公式轉換成:
{0,1,3}
分別代表工作表Sheet1、Sheet2、Sheet3的列B中“Red”的數量。
因為我們想得到第一個匹配的結果,所以將該數組傳遞給MATCH函數:
MATCH(TRUE,COUNTIF(INDIRECT(“‘”&Sheets&”‘!B:B”),$A3)>0,0)
轉換為:
MATCH(TRUE,{0,1,3}>0,0)
轉換為:
MATCH(TRUE,{FALSE,TRUE,TRUE},0)
結果為:
2
因此,將在工作表列表中的第2個工作表即Sheet2中執行VLOOKUP操作。
現在,將上面的結果作為參數值傳遞給INDEX函數:
INDEX(Sheets,MATCH(TRUE,COUNTIF(INDIRECT(“‘”&Sheets&”‘!B:B”),$A3)>0,0))
轉換為:
INDEX(Sheets,2)
轉換為:
INDEX({“Sheet1″,”Sheet2″,”Sheet3”},2)
結果為:
Sheet2
這里,需要使用INDIRECT函數進一步構造來生成傳遞給VLOOKUP函數的單元格區域,因此:
=VLOOKUP($A3,INDIRECT(“‘”&INDEX(Sheets,MATCH(TRUE,COUNTIF(INDIRECT(“‘”&Sheets&”‘!B:B”),$A3)>0,0))&”‘!B1:D10″),3,0)
轉換為:
=VLOOKUP($A3,INDIRECT(“‘Sheet2″&”‘!B1:D10”),3,0)
轉換為:
=VLOOKUP($A3,INDIRECT(“‘Sheet2′!B1:D10”),3,0)
轉換為:
=VLOOKUP($A3,’Sheet2’!B1:D10,3,0)
得到結果:
55