具有条件

时间:2016-06-08 13:06:52

标签: excel vba excel-vba

如果2个字段相同(我认为这两个字段是识别每个记录的键),我试图将值从一张小表“MD with ID”复制到一张较大的表“D with ID”。

这是我的第一次尝试:

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

这是我的第二次尝试:

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

此代码运行时excel表中没有任何变化,尽管运行-_-“只需几分钟。”

..样本被删除

1 个答案:

答案 0 :(得分:1)

所以看一下你的第一个CopyIdCells方法,我只会做一个修复 - make变量d = 2。这个标题位于示例数据的顶部,您需要从第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

除了您的公式看起来不错外,您还没有任何符合您要求的数据。将此列添加到" MD与ID"的底部你会看到你的代码匹配。

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

因为您匹配"案例编号" AND"其他ID"两张表中都没有符合此条件的商品。当您将上面的行添加到带有ID"的" MD时,您会在多行上看到添加到第二张表的相应ID。