匹配来自2个不同工作簿的2列,如果没有匹配则将0放在另一列中?

时间:2018-04-23 20:28:35

标签: vba excel-vba excel

我只需要对此代码提供一些帮助。我只是拥有它但不完全。

我需要在2个不同的工作簿中匹配2个不同的列。我需要将工作簿datafeed.xlsx上的列b(sku)与列b(sku)上的工作簿result.xlsx相匹配,如代码所示。 如果result.xlsx与workgroup datafeed.xlsx不匹配,那么我需要在列/行ab2中放置一个数字0,它从b2偏移到第26列。

我知道在查找表中我可以使用ISNA,但我甚至无法使用它。我尝试了不同的东西,但没有运气。我肯定做错了,因为它不起作用,我们将不胜感激。

这是我的代码:

    Set w3 = Workbooks("datafeed.xlsx").Sheets("datafeed")    Set w4 = Workbooks("result.xlsx").Sheets("Sheet 1")

    For Each z In w3.Range("b2", w3.Range("b" & Rows.Count).End(xlUp))
    XR = 0
    On Error Resume Next
    XR = Application.Match(z, w4.Columns("b"), 0)
    On Error GoTo 0
    If XR <> 0 Then w4.Range("AB2" & XR).Value = z.Offset(, 11)

    Next z

感谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以在目标工作表的B列中查找源表的B列中的值。如果目标工作表包含值(/ not),则需要将1/0写入AB列。

下面的代码将两列读入数组,并通过它们比较两者。找到相同长度的结果数组,并在找到/找不到项目时向其写入1/0。最后,数组被粘贴到AB列

Sub test()
    Dim wbSource As Workbook, wbTarget As Workbook
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim compare1 As Variant, compare2 As Variant, result As Variant

    Set wbSource = Workbooks("datafeed.xlsx")
    Set wbTarget = Workbooks("result.xlsx")
    Set wsSource = wbSource.Sheets("datafeed")
    Set wsTarget = wbTarget.Sheets("Sheet 1")

    compare1 = wsSource.Range("B2", wsSource.Range("B" & Rows.Count).End(xlUp))
    compare2 = wsTarget.Range("B2", wsTarget.Range("B" & Rows.Count).End(xlUp))

    ReDim result(LBound(compare1), UBound(compare1))

    For i = LBound(compare1) To UBound(compare1)
        found = False
        For j = LBound(compare2) To UBound(compare2)
            If compare1(i) = compare2(j) Then
                result(i) = 1
                found = True
                Exit For
            End If
        Next j
        If found = False Then
            result(i) = 0
        End If
    Next i
    wsSource.Range(Cells(2, 28), Cells(UBound(result) + 1, 28)) = Results

End Sub