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
结束小组
您正在从w2
列A
w1
列D
中search值。 除了“Mach7”之外, 所有值都将被find。 所以所有的值都会被更新。
如果w2
列C
仍然是空的,你可能只想更新。 那么你必须检查这个。
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
是否是一个错误值。