Excel 2010宏用于比较两列以查找匹配的值

时间:2014-12-30 06:17:30

标签: excel vba excel-vba excel-2010

我是Excel宏和VBA的新手,请帮助我取悦以下情况。 这是情况,我在sheet1中有两张(sheet1和sheet 2)有两列名称和数字,在sheet2中我有其他信息的数字,如日期,充电等。

第1页

没有姓名PhoneNumber

1 Bob 7254

2 Cristin 5468

3 Luara 1234

Sheet2

没有电话号码日期收费名称

1 1145 12/30/2014 2 $

2 7254 11/26/2014 3 $

3 2365 3/9/2014 7 $

4 5468 3/10/2014

5 1234 3/11/2014

我想要的是将sheet2(B列)的PhoneNumber列与sheet1(C列)的PhoneNumber列进行比较,如果找到匹配,则将Sheet1中的Name(B列)复制到sheet2的Name列(E列) 。如果不匹配,则sheet2中的name列必须为空。

我已搜索并找到以下代码并进行了一些修改,但我不确定它是否正确:

    Sub test()

    Dim rng1 As Range, rng2 As Range, i As Integer, j As Integer
        For i = 1 To Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row
            Set rng1 = Sheets("Sheet2").Range("B" & i)
            For j = 1 To Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row
                Set rng2 = Sheets("Sheet1").Range("C" & j)
                If rng1.Value = rng2.Value Then
                    Range("B2:B" & TotalRows).Copy Destination:=Sheets("Sheet2").Range("E2")
                End If

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

请帮助我,因为我的这个项目的时间太短了,我非常感谢你在这方面的帮助。

1 个答案:

答案 0 :(得分:2)

看起来你几乎就在那里。但是,您的副本行需要稍微调整一下。在下面的示例中,我添加了一个名为rngName的附加变量,用于存储要复制的名称范围,并在for j循环中为其赋值。如果数字匹配(即rng1.value = rng2.value),它会将包含名称的范围复制到工作表2中的关联行。请注意,我使用.Range(“E”和i)作为复制到范围。示例中的复制范围始终将名称放在与始终分配给“E2”的同一单元格中。此外,您有一个名为TotalRows的变量没有值。它必须意味着你复制它的原始代码,所以我也摆脱了它。试试这个,让我知道它是如何为你工作的。

Sub test()
 Dim rng1 As Range, rng2 As Range, rngName As Range, i As Integer, j As Integer
    For i = 1 To Sheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row
        Set rng1 = Sheets("Sheet2").Range("B" & i)
        For j = 1 To Sheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row
            Set rng2 = Sheets("Sheet1").Range("C" & j)
            Set rngName = Sheets("Sheet1").Range("B" & j)
            If rng1.Value = rng2.Value Then
                rngName.Copy Destination:=Worksheets("Sheet2").Range("E" & i)
            End If

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