比较两个不同的Excel工作表和工作簿中的列,然后将匹配的值发布到另一列

时间:2013-07-26 13:25:00

标签: excel vba excel-vba worksheet

我在尝试找出这个宏时遇到了很多麻烦,所以现在我在工作簿中使用了2张;我想使用两种不同的工作簿,但这并不像问题那么重要。

要解释,Sheet1列E是id号,而Sheet2列A是id号,现在如果Sheet1 E中的任何值与Sheet2中A列中的值匹配,我需要宏来从Sheet复制相应的单元格2列D.所以基本上如果E5(来自表1)与Sheet2中的A1匹配,我需要宏来将Sheet2的D1输出到Sheet1的F5。如果Sheet1列E与Sheet 2列A中的值不匹配,也可以删除Sheet1列F的值。

我有一些代码,但是如果Sheet1列E的值与Sheet2列A中的值匹配,它只会粘贴Sheet2列D中的值。问题是当Sheet2粘贴的值粘贴在Sheet1的列F和值中时与Sheet2中匹配的正确值不匹配。他们只是愚蠢。因此,如果Sheet1列E是这样的

Sheet1 Column E    Sheet1 F

1317               relays_120x120.jpg
1319              Control%20boards_120x120
1320              Control%20boards_120x120

Sheet2 Column A             Sheet2 column D
1317                       relays_120x120
1318                       /relays_120x120
1319                    ebay/SingleRunOval

但实际上我需要它们全部相等,如果Sheet1列E的值不在Sheet2列中,则不要在Sheet1列中发布链接F将其留空。

这是我的代码

Sub FindMatches()

    Dim oldRow As Integer
    Dim newRow As Integer
    Dim i As Integer

    i = 1

    For oldRow = 2 To 1170
        For newRow = 1 To 1170
            If Worksheets("Sheet1").Cells(oldRow, 5) = Worksheets("Sheet2").Cells(newRow, 1) Then

                Worksheets("Sheet1").Cells(i, 6) = Worksheets("Sheet2").Cells(oldRow, 4)


                i = i + 1

                Exit For
            End If
        Next newRow
    Next oldRow


End Sub

2 个答案:

答案 0 :(得分:3)

听起来你可以用VLookup功能完成你的目标。将此公式添加到Sheet1 F1:=IFERROR(VLookup(E1,Sheet2!A:D,4,FALSE),"")

如果找到匹配项,该公式会将单元格复制到sheet1中,但如果找不到匹配项,则单元格将保持空白。

答案 1 :(得分:1)

尝试使用以下代码。我刚刚使用StrComp函数修改了你的代码

Sub FindMatches()

    Dim oldRow As Integer
    Dim newRow As Integer
    Dim i As Integer
    i = 1
    For oldRow = 1 To 1170
        For newRow = 1 To 1170
            If StrComp((Worksheets("Sheet1").Cells(oldRow, 5).Text), (Worksheets("Sheet2").Cells(newRow, 1).Text), vbTextCompare) <> 0 Then
                i = oldRow
                Worksheets("Sheet1").Cells(i, 6) = " "
                Else
                Worksheets("Sheet1").Cells(i, 6) = Worksheets("Sheet2").Cells(newRow, 4)
                i = i + 1
                Exit For
            End If
        Next newRow
    Next oldRow

End Sub