你也许可以用公式来做到这一点,而不是使用VBA。
如果你没有头粘贴此公式到工作表Sheet1的单元格E1:
=IF(AND(A1=INDEX(Sheet2!A:A,MATCH(A1,Sheet2!A:A,FALSE)),B1=INDEX(Sheet2!B:B,MATCH(B1,Sheet2!B:B,FALSE)), C1=INDEX(Sheet2!C:C,MATCH(C1,Sheet2!C:C,FALSE)),D1=INDEX(Sheet2!D:D,MATCH(D1,Sheet2!D:D,FALSE))),INDEX(Sheet2!E:E,MATCH(A1,Sheet2!A:A,FALSE)),"NO")
或者这一个为E2,如果你有一个标题行:
=IF(AND(A2=INDEX(Sheet2!A:A,MATCH(A2,Sheet2!A:A,FALSE)),B2=INDEX(Sheet2!B:B,MATCH(B2,Sheet2!B:B,FALSE)), C2=INDEX(Sheet2!C:C,MATCH(C2,Sheet2!C:C,FALSE)),D2=INDEX(Sheet2!D:D,MATCH(D2,Sheet2!D:D,FALSE))),INDEX(Sheet2!E:E,MATCH(A2,Sheet2!A:A,FALSE)),"NO")
然后拖动整个使用在单元格右下方的切换点就像您希望列从工作表2进入一样。
然后突出显示刚刚创建的整行,然后将右下方的小切换拖到工作表的最下方,因为您有数据(或者尝试双击切换到自动填充)。
我在一小组数据上尝试了这一点,它似乎可以工作,因此它应该适用于较大的数据集,只要sheet1上的4列的所有可能的变体都可以在sheet2上使用,并在以下列中包含相关数据。
如果在任何单元格中得到“否”的结果,则Excel无法在sheet2中找到与sheet1上匹配的确切组合的行。
编辑 - 更新下面的答案。
试试这个,这对你来说更有可能。
Sub CopyItOver()
Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = Sheets("Sheet1")
Set sh2 = Sheets("Sheet2")
For Each c1 In sh1.Range("A1", sh1.Range("A1").End(xlDown))
For Each c2 In sh2.Range("A1", sh2.Range("A1").End(xlDown))
If c2.Value = c1.Value Then
If c2.Offset(0, 1).Value = c1.Offset(0, 1).Value Then
If c2.Offset(0, 2).Value = c1.Offset(0, 2).Value Then
If c2.Offset(0, 3).Value = c1.Offset(0, 3).Value Then
c1.EntireRow.Value = c2.EntireRow.Value
End If
End If
End If
End If
Next c2
Next c1
End Sub
如果你不知道我的VBA认为这将是更好地去自由职业者的网站,并张贴此作为一个工作,你会得到它与花费的金额不大很快完成。否则,请提供你已经尝试过的东西以及你卡在哪里。 – user1429899