比较2个工作簿中的2列,如果找到匹配则复制匹配的行

时间:2014-06-08 23:43:56

标签: excel vba excel-vba

我有两本练习册(或两张):练习册A和练习册B. 我想比较一下: 工作簿A中的列B和C WITH 工作簿B中的A列和B列 如果找到匹配那么 我需要从Workbook B复制MATCHED行并将其粘贴到工作簿A上的MATCHED行。 换句话说:我需要将工作簿B的匹配行的C列和D列的单元格值复制到工作簿A中匹配行的列D和E的单元格中。

到目前为止我只有 比较了我希望是正确的2列。 下面的代码是2张而不是两张工作簿:

Sub compareNcopy()

Dim sh1 As Worksheet, sh2 As Worksheet, sh3 As Worksheet

Set sh1 = Sheets("Sheet1"): Set sh2 = Sheets(2): Set sh3 = Sheets(3)


Dim i As Long, j As Long,
Dim lr1 As Long, lr2 As Long
Dim nxtRow As Long
Dim rng1 As Range, rng2 As Range, rng3 As Range

lr1 = sh1.Range("A" & Rows.Count).End(xlUp).Row
lr2 = sh2.Range("A" & Rows.Count).End(xlUp).Row

For i = 1 To lr1
    Set rng1 = sh1.Range("A" & i)

    For j = 1 To lr2
        Set rng2 = sh2.Range("A" & j)

        If StrComp(CStr(rng1.Value), CStr(rng2.Value), vbTextCompare) = 0 Then

            If rng1.Offset(0, 1).Value = rng2.Offset(0, 1).Value Then

            End If

        End If
        Set rng2 = Nothing
    Next j
    Set rng1 = Nothing
Next i
End Sub

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

要复制两张(甚至两本书),就像复制到同一张(或书)中的另一张单元格一样,您只需要指定哪张(或书)。你想要做的是:

sh2.Cells(j,3).Resize(1,2).Copy Destination:=sh1.Cells(i,3).Resize(1,2)

如果您要复制的数据在sh2中找到,则适用。如果是相反的方式,请切换sh2sh1以及ji

如果要在工作簿之间进行复制,则需要在Workbooks(wb1).说明符前添加Sheets(sh2).wb1为工作簿变量。

编辑:由于sh2本质上是Sheets(2),我之前显示的是Sheets(Sheets(2))这是没有意义的,这就是错误突然出现的原因。我很抱歉。不要使用Sheets(sh2)而只使用sh2sh1也是如此。我已修复上述代码以反映这一点。