2017-04-05 187 views
-1

我對VBA/Excel有點新,所以我想知道是否有人會幫我。VLOOKUP比較2個不同工作簿中的數據與VBA

我的問題:
我有兩個不同的工作簿,但在這些工作簿中有兩列具有公用數據。因此我想用VLOOKUP來比較兩列,看看是否有共同的數據。

詳細說明:
第一工作簿:有3個不同的片材,我只需要使用片「項目」,其具有在列中的數據2.

第二工作簿:只有1個被稱爲「數據」片和在第4列中有數據。

因此,我的目標是比較2列。在workbook1中,數據列旁邊有一個空列,所以如果有匹配,我想在其中說「ok」。如果不匹配,那麼「」。

我試過VLOOKUP,但真的無法理解它。另外這是工作。

回答

1

你可以試試這個..

假設你的第二個工作簿的名稱是Book2.xlsx,那就試試這個...

在第一個工作簿 在C2

=IF(ISNUMBER(MATCH(B2,'[Book2.xlsx]Data'!$D:$D,0)),"OK","") 

和把它複製下來。

如果您需要VBA解決方案,一種獲得所需輸出的方法如下... 以下代碼假定Book1.xlsm(將包含下面的代碼)和Book2.xlsx都保存在相同的文件夾。 如果它們保存在不同的位置,請在以下代碼行中更改Book2.xlsx的路徑和名稱。

sourceFilePath = dwb.Path & "\" 
sourceFileName = "Book2.xlsx" 

代碼:

Sub CompareData() 
Dim swb As Workbook, dwb As Workbook 
Dim sws As Worksheet, dws As Worksheet 
Dim slr As Long, dlr As Long, i As Long 
Dim sourceFilePath As String, sourceFileName As String 
Dim x, y, z, dict 
Application.ScreenUpdating = False 

Set dwb = ThisWorkbook 
Set dws = dwb.Sheets("Items") 
dlr = dws.Cells(Rows.Count, 2).End(xlUp).Row 
x = dws.Range("B2:B" & dlr).Value 
ReDim z(1 To dlr) 
sourceFilePath = dwb.Path & "\" 
sourceFileName = "Book2.xlsx" 

Workbooks.Open sourceFilePath & sourceFileName 

Set swb = ActiveWorkbook 
Set sws = swb.Sheets("Data") 
slr = sws.Cells(Rows.Count, 4).End(xlUp).Row 
y = sws.Range("D2:D" & slr).Value 

Set dict = CreateObject("Scripting.Dictionary") 

For i = 1 To UBound(y, 1) 
    dict.Item(y(i, 1)) = "" 
Next i 
swb.Close False 

For i = 1 To UBound(x, 1) 
    If dict.exists(x(i, 1)) Then 
     z(i) = "OK" 
    Else 
     z(i) = "" 
    End If 
Next i 
dws.Range("C2").Resize(UBound(x, 1), 1).Value = Application.Transpose(z) 
Application.ScreenUpdating = True 
End Sub 
+0

嗨,我明白這一點,但我需要做的是在VBA代碼不擅長因此爲什麼我掙扎。 –

+0

到目前爲止,您是否有開始代碼或分享您嘗試過的任何內容?如果是的話,你有什麼問題呢? – sktneer

+0

我已經在我的解決方案中添加了一個代碼,看看你是否試圖實現。 – sktneer