我目前有兩列需要比較。 A 列,表 1 和 A 列,表 2。
表 1 包含:
A B C
5000 Apples WI
6182 Oranges NY
7271 Grapes MN
2293 Peanuts FL
表 2 包含:
A
4032
5233
7271
2293
應該會收到類似的結果.....
7271 Grapes MN
2293 Peanuts FL
我只需要顯示包含與工作表 2 相同數字的結果。
'For i = 1 to Sheet1LastRow
Sheet2Row = Range("A" & Rows.Count).End(xlUp).Row
Sheet2Array = Range("A2:A" & Sheet2LastRow).Value
For i = LBound(Sheet2Array, 1) To UBound(Sheet2Array, 1)
'if cell = Sheet2Array(i, 1)
'....
'End if
Next i
'Next Cell sheet 1
答案1
這是 的核心功能=VLOOKUP()
。
語法是:
=VLOOKUP(
compare this cell,
to the cells in the leftmost column of this range,
returning the corresponding value from this column index,
true/false for range lookup (just leave this false if you aren't sure)
)
在工作表 2 上,您將在儲存格 B1 中放置=VLOOKUP(A1,Sheet1!A:B,2,False)
,在 C1 中您將放置=VLOOKUP(A1,Sheet1!A:C,3,False)
此功能適用於工作表之間以及工作簿之間(但您必須啟用連結並注意兩個工作簿的變更)。不需要 VBA,這是一個簡單的內聯函數。
在此基礎上進行擴展,您可能會#N/A
因來源表中不存在的值而出現錯誤。將公式換行=IFERROR( your vlookup() function , "" )
以空白儲存格取代任何錯誤。
答案2
從您的問題和範例數據來看,很明顯,您正在尋找的輸出是一列,該列在連續的單元格區塊中包含匹配的數據,中間沒有任何空白或錯誤。
如果您希望使用公式方法,則可以在陣列公式中使用稍微複雜的 INDEX 和 MATCH 函數來實現。一旦列中的連續儲存格中有匹配的數據,只需應用 VLOOKUP 從 Sheet1 的主表中取得剩餘的兩個欄位。
就是這樣。下面是Sheet1和Sheet2的兩張截圖。
Sheet1 在 A、B 和 C 欄位中包含您的主表,Sheet2 具有與 Sheet1 中的 A 欄位相符的列表
現在在 Sheet2 中的儲存格 C1 中輸入下列陣列公式
{=INDEX(Sheet1!$A$1:$A$4,SMALL(IF(ISERROR(MATCH(Sheet2!$A$1:$A$4,Sheet1!$A$1:$A$4,0)),"",MATCH(Sheet2!$A$1:$A$4,Sheet1!$A$1:$A$4,0)),ROW(1:1)))}
將此公式放在不含大括號的情況下,然後在公式列中按 CTRL+SHIFT+ENTER 建立陣列公式並將其向下拖曳,直到儲存格或要符合的清單長度出現錯誤。現在,錯誤儲存格上方的所有行都具有 Sheet1 的 A 列中的符合儲存格。
只需清除錯誤單元格,您就可以在連續的單元格區塊中獲得清單。
現在在 D1 中輸入相對簡單的 VLOOKUP 公式以從 Sheet1 中取得下一個符合列
=VLOOKUP(C1,Sheet1!$A$1:$C$4,2,FALSE)
在E1中輸入公式
=VLOOKUP(C1,Sheet1!$A$1:$C$4,3,FALSE)
並將兩者都拖下來。您已獲得所需的清單。
您可以使用 Excel 的內建評估公式選項來評估 INDEX MATCH 組合,以了解其運作方式。它會建立一個符合行號的數組,並在您向下拖曳公式時選擇第一個、第二個、第三個最小的數字。
這裡的兩個限制是,資料應按其在主表中存在的順序返回,而不是按其在「要匹配」表中的順序返回,如果您有多個匹配單元格,則應返回第一個。