我是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
请帮助我,因为我的这个项目的时间太短了,我非常感谢你在这方面的帮助。
答案 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