VLOOKUP将2个不同工作簿中的数据与VBA

时间:2017-04-05 03:42:08

标签: excel vba excel-vba find vlookup

我对VBA / Excel有些新意,所以我想知道是否有人会帮助我。

我的问题:
我有两个不同的工作簿,但在这些工作簿中,有两列有共同的数据。因此,我想使用VLOOKUP来比较两列,看看是否有共同的数据。

详细说明:
第一本练习册:有3种不同的工作表,我只需要使用工作表"项目"其中包含第2栏中的数据。

第二本工作簿:只有一张名为"数据"并在第4栏中有数据。

因此,我的目标是比较2列。在workbook1中,数据列旁边有一个空列,因此,如果有匹配,我想说" ok"在里面。如果没有匹配则""。

我试过VLOOKUP但实际上无法理解。另外这是为了工作。

1 个答案:

答案 0 :(得分:1)

你可以试试这个..

假设您的第二个工作簿的名称是Book2.xlsx,那么试试这个......

On First workbook 在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