2017-08-10 67 views
0

我有两张纸,我想比较一张纸上名字和姓氏(列A和B)中的数据是否在纸张2(也是列A和B),其中第一个名称在列A中并且姓氏在列B中。如果在sheet2中找到来自sheet1的姓氏和姓氏,并且如果在第2张(列E)行等于2,那么我想复制客户明细行(列D)从Sheet2到Sheet 1的P列。Excel宏比较两张纸上的数据并将值粘贴在匹配上

我觉得我下面的代码应该可以工作,但它并不粘贴客户资料放入sheet1的P栏中。任何想法为什么?

Sub matchandpaste() 


Dim cell, cell2, revenue As Range 
Dim wbk As Workbook 
Dim sheet1, sheet2 As Worksheet 
Dim temp, firstName, lastName As String 

Set wbk = ThisWorkbook 

Set Sheet1 = wbk.Sheets("Sheet1") 
Set sheet2 = wbk.Sheets("Sheet2") 


For Each cell In Sheet1.Range("B2:B" & Range("B2").End(xlDown).Row) 
    lastName = cell.Value 
    firstName = cell.Offset(0, -1).Value 
    Set revenue = cell.Offset(0, 14) 
    For Each cell2 In sheet2.Range("B2:B" & Range("B2").End(xlDown).Row) 
     If lastName = cell2.Value And firstName = cell2.Offset(0, -1).Value And cell2.Offset(0, 3).Value = 2 Then 
      revenue = cell2.Offset(0, 2).Value 
     End If 
    Next cell2 
Next cell 
+0

没有,因为我想从塔E中的数据复制在表2,P列在片材1,所以设定'revenue'作为变量的地方,我想要粘贴数据 – Xcelrate

+0

@KPaul没有问题,我可以想象,如果没有数据集就难以可视化。我敢肯定,这也可以按照您的建议使用自定义函数来完成,不过我想用这个宏来解决问题的底部,因为它看起来应该可以工作,但它让我发疯。 – Xcelrate

+1

请参阅下面的@ Jarom的回复。 –

回答

2

你只要把.valuerevenue范围变量的末尾。像这样:

Sub matchandpaste() 


Dim cell, cell2, revenue As Range 
Dim wbk As Workbook 
Dim sheet1, sheet2 As Worksheet 
Dim temp, firstName, lastName As String 

Set wbk = ThisWorkbook 

Set Sheet1 = wbk.Sheets("Sheet1") 
Set sheet2 = wbk.Sheets("Sheet2") 


For Each cell In Sheet1.Range("B2:B" & Range("B2").End(xlDown).Row) 
    lastName = cell.Value 
    firstName = cell.Offset(0, -1).Value 
    Set revenue = cell.Offset(0, 14) 
    For Each cell2 In sheet2.Range("B2:B" & Range("B2").End(xlDown).Row) 
     If lastName = cell2.Value And firstName = cell2.Offset(0, -1).Value And cell2.Offset(0, 3).Value = 2 Then 
      revenue.value = cell2.Offset(0, 2).Value 
     End If 
    Next cell2 

Next cell 

End Sub 
+0

这是一个很好的结果。 –

+0

太棒了,我不敢相信我多次查看了代码并且一直在想这个。 – Xcelrate

+0

是的,在我意识到问题之前,我花了一些时间搞乱了代码。它并不真正跳出你哈哈! – Jarom

相关问题