excel vbamacros来匹配来自两个不同工作簿的单元格,并相应地进行复制和粘贴,并且只更新空单元格

请帮我在这..

我有两个工作簿Bookone.xlsm和Booktwo.xlsm,bookone将是源,booktwo是目标excel文件。

Bookone和Booktwo有以下数据。 源文件和目标文件快照

我只需要更新空的单元格,但所有的单元格都在更新,包括非空单元格

输出我的VBA脚本。 产量

提前致谢.. :)

我的代码:

Sub UpdateW2() Dim w1 As Worksheet, w2 As Worksheet Dim c As Range, FR As Long Application.ScreenUpdating = False Set w1 = Workbooks("BookOne.xlsm").Worksheets("Sheet1") Set w2 = Workbooks("BookTwo.xlsm").Worksheets("Sheet1") For Each c In w1.Range("D2", w1.Range("D" & Rows.Count).End(xlUp)) FR = 0 On Error Resume Next FR = Application.Match(c, w2.Columns("A"), 0) On Error GoTo 0 If FR <> 0 Then w2.Range("C" & FR).Value = c.Offset(, -3) If FR <> 0 Then w2.Range("C" & FR).Value.Interior.ColorIndex=8 Next c Application.ScreenUpdating = True 

结束小组

您正在从w2A w1D中search值。 除了“Mach7”之外, 所有值都将被find。 所以所有的值都会被更新。

如果w2C仍然是空的,你可能只想更新。 那么你必须检查这个。

 Sub UpdateW2() Dim w1 As Worksheet, w2 As Worksheet Dim c As Range, FR As Variant Application.ScreenUpdating = False Set w1 = Workbooks("BookOne.xlsm").Worksheets("Sheet1") Set w2 = Workbooks("BookTwo.xlsm").Worksheets("Sheet1") For Each c In w1.Range("D2", w1.Range("D" & Rows.Count).End(xlUp)) FR = Empty FR = Application.Match(c, w2.Columns("A"), 0) If TypeName(FR) <> "Error" Then 'match was found If IsEmpty(w2.Range("C" & FR)) Then 'cell in w2 is still empty w2.Range("C" & FR).Value = c.Offset(, -3) w2.Range("C" & FR).Interior.ColorIndex = 8 End If End If Next c Application.ScreenUpdating = True End Sub 

WorksheetFunction.Match相反,如果找不到匹配项, Application.Match 不会抛出错误。 相反,它会返回一个错误值。 因此,如果将FR作为Variant则不需要在此处inputOn Error... 然后你可以检查FR是否是一个错误值。