2016-06-08 208 views
2

我试图从一个小的工作表“带ID的MD”的值复制到一个较大的工作表“带ID的D”如果2个字段是相同的(考虑这两个作为标识每个记录的键)。Excel VBA复制粘贴条件值

这是我第一次尝试:

Sub CopyIDCells() 

Set i = Sheets("MD with ID") 
Set e = Sheets("D with ID") 
Dim d 
Dim j 
d = 1 
j = 2 

Do Until IsEmpty(e.Range("B" & j)) 
    d = 2 
    Do Until IsEmpty(i.Range("A" & d)) 
     If e.Range("C" & j).Value = i.Range("D" & d).Value Then 
      If e.Range("M" & j).Value = i.Range("J" & d).Value Then 
       e.Range("A" & j).Value = i.Range("B" & d).Value 
      End If 
     End If 
     d = d + 1 
    Loop 
    j = j + 1 
Loop 

End Sub 

这里是我的第二次尝试:在Excel工作表此代码运行时

Sub CopyIDCells2() 

Set i = Sheets("MD with ID") 
Set e = Sheets("D with ID") 
Dim d 
Dim j 
d = 1 
j = 2 

Do Until j = 20886 
    d = 2 
    Do Until d = 1742 
     If e.Cells(j, 3).Value = i.Cells(d, 4).Value Then 
      If e.Cells(j, 13).Value = i.Cells(d, 10).Value Then 
       e.Cells(j, 1).Value = i.Cells(d, 2).Value 
      End If 
     End If 
     d = d + 1 
    Loop 
    j = j + 1 
Loop 

End Sub 

没有什么变化,但它需要几分钟的时间来运行-_ - ”

..取出样品

+1

您能否提供至少一个输入样本?同样,“带ID的MD”中的“A1”到“A10”以及“带ID的D”中的“B2”到“B10”中的内容是什么?其他投入也可能有用。 –

+0

访问单元格中的数据时,请尝试使用Value2属性而不是Value。取决于数据的样子,它可能会修复它。 http://stackoverflow.com/questions/17359835/what-is-the-difference-between-text-value-and-value2 – Danny

+0

也尝试插入几个调试语句,看看你的代码是做什么比较,以及如何逻辑加工。我会在你的第一个If语句之后放一个:'Debug.Print“e.Cells(”&j&“,3)等于i.Cells(”&d&“,4) - >”&e。单元格(j,3).value&“=”&i.Cells(d,4).value'。然后在下一个If语句之后再打印一个调试信息。如果您可以直观地检查您知道应该复制的等效位置,那么在测试时调整您的循环参数以专注于该区域。 – PeterT

回答

1

所以看你的第一CopyIdCells方法,我只会对此做一个修正 - 使变量d = 2。这在您的示例数据的顶部有标题,您需要像第二行一样从第二行开始。

Sub CopyIDCells() 

Set i = Sheets("MD with ID") 
Set e = Sheets("D with ID") 
Dim d 
Dim j 
d = 2 
j = 2 

Do Until IsEmpty(e.Range("B" & j)) 
    d = 2 
    Do Until IsEmpty(i.Range("A" & d)) 
     If e.Range("C" & j).Value = i.Range("D" & d).Value Then 
      If e.Range("M" & j).Value = i.Range("J" & d).Value Then 
       e.Range("A" & j).Value = i.Range("B" & d).Value 
      End If 
     End If 
     d = d + 1 
    Loop 
    j = j + 1 
    Loop 

End Sub 

除此之外,你的公式看起来不错,你只是没有任何数据符合你的要求。将此列添加到“带ID的MD”的底部,您将看到您的代码匹配。

mouse 10 08 11267 A/J M 823 1/11/2008 1 SC-807 LONG 10/10/2005 

由于您在“案例号”和“其他ID”上匹配,所以两张表中都没有符合此条件的项目。当您将上述行添加到“带ID的MD”时,您会在多行中看到添加到第二张纸上的相应ID。

+0

如果行之间有空白,怎么办?它会在需要之前退出 – Sgdva

+0

当然会。这取决于她的数据集。她有两个版本的代码。一行经过数千行,另一行设计为在第一个空白处退出。两者的底层代码基本相同。所以两个对待相同应该工作相同。只取决于她的意图。同样的编辑只需要应用到第二个脚本,虽然我没有验证那个。看起来她至少想要一个人来解决这个问题。 – Chewy

+0

我试图解决它,但它不工作,显然,即使值应该是真的,条件总是假的! 谢天谢地,我能够通过python 进行更改,谢谢大家的帮助:) –