選單

Excel中VLOOKUP函式實現多列資料批次提取

問題背景:

在工作或生活中,經常要用到把兩個表格的資料合併在一起,例如兩個表格是相同的商品在不同時間段的價格或銷售資料,需要根據商品名稱把兩個表的資料整合在一起以便做更深度的資料統計和分析。我們知道可以用vlookup函式查詢和提取,透過vlookup函式根據名單來查詢和引用資料,實現多表整合。

但是vlookup是透過指定區域的列號來提取資料的,即第三個引數決定的,例如:

=VLOOKUP(B3,(Sheet2!B:D),3,0)

邏輯為:

根據sheet1裡B3單元格(B列)的內容,去sheet2的B列到D列區域裡查詢相同的內容,並引用B3內容所在行的第三列(選擇區域的第3列)的值。

Excel中VLOOKUP函式實現多列資料批次提取

因為是指定提取某列的資料,這就意味著一次只能提取一列資料,如果要求整合併入的內容有多列,那該怎麼辦呢?

根據vlookup的邏輯,可以想到兩種方式來實現:一是每操作一列寫一個公式,修改其第三個引數為指定內容的列號,這樣的話,需要併入多少列,就要改寫多少次公式;二是嘗試讓第三個引數形成變數,使公式支援往右列方向填充,並自動更新第三個引數的列號,從而實現寫一次公式提取多列資料。

例項一:逐列寫公式

提取sheet2的“5月銷量”、“1-5月累計”兩列到sheet1。

第一步:提取sheet2的“5月銷量”到sheet1,即sheet1的H列提取sheet2指定區域B:E列的第三列,為D列。公式為=VLOOKUP(B3,(Sheet2!B:E),3,0)

Excel中VLOOKUP函式實現多列資料批次提取

第二步:同理,提取sheet2的“1-5月累計”到sheet1,即sheet1的I列提取sheet2指定區域B:E列的第四列,為E列。公式為=VLOOKUP(B3,(Sheet2!B:E),4,0)

Excel中VLOOKUP函式實現多列資料批次提取

例項二:變數公式

提取sheet2的“5月銷量”、“1-5月累計”兩列到sheet1。根據例項一分析,vlookup的第一個引數、第二個引數、第四個引數均不變,只要改變第三個引數即可。而實際中第三個引數是遞增1的列號。如sheet1的H列提取sheet2中B:E區域的第3列,sheet1的I列提取sheet2中B:E區域的第4列,所以,只要構造公式,使vlookup第三個引數為3開始,遞增為1的變數,實現取到3和4就行。

此時,我們可以用COLUMN函式作為vlookup的第三個引數。COLUMN是獲取指定單元格所在列數的函式。公式為=COLUMN(A1),結果返回1,如果=COLUMN(B255),則返回2。

那麼,為什麼要用COLUMN取列號呢?為什麼不用取行號的公式ROW呢,行號也可以構造出結果為3和4呀?

這是因為是要實現公式往右填充,用COLUMN才能往右遞增,如果用ROW取行號,只能往下填充才遞增。

Excel中VLOOKUP函式實現多列資料批次提取

第一步:提取sheet2的“5月銷量”到sheet1。即對例項一的公式進行改進,由於這裡我們對公式不僅要向下填充,還要為下一步向右填充做準備,所以對於不可變的引數,需要寫絕對引用,公式為=VLOOKUP($B3,(Sheet2!$B:$E),(COLUMN(C1)),0)

Excel中VLOOKUP函式實現多列資料批次提取

第二步:同理,提取sheet2的“1-5月累計”到sheet1,因為vlookup第三個引數用了變數,此時把H3的公式向右填充即可,COLUMN(C1)為3即可變為COLUMN(D1),為4。

Excel中VLOOKUP函式實現多列資料批次提取

而由於vlookup的第一個引數和第二個引數單元格或列均用了絕對引用,只有向下填充行會變動,而向右填充列不會變動,因此能保證vlookup函式的Lookup_value和Table_array準確而不受公式向右填充改變,所提取的資料也是準確的。

Excel中VLOOKUP函式實現多列資料批次提取