我正在尝试比较两张纸。工作表的结构绝对相同-> Sheet1中的AD4单元应与Sheet2中的AD4相同,如果不同,则突出显示AD4单元。只要数据存在,就应该这样做。
下面的代码不起作用,但是不显示任何错误消息。
Sub CompareAndHighlightDifferences()
Dim w1 As Worksheet, w2 As Worksheet
Dim c As Range, a As Range
Set w1 = Sheets("2019 Project Detail")
Set w2 = Sheets("2019 Project Detail SOURCE")
With w1
For Each c In .Range("AD4", .Range("AD" & Rows.Count).End(xlUp))
Set a = w2.Columns(30).Find(c.Value, LookAt:=xlWhole)
If Not a Is Nothing Then
If .Cells(c.Row, c.Column).Value <> w2.Cells(a.Row, a.Column) Then
.Cells(c.Row, c.Column).Font.Color = vbRed
End If
End If
Next c
End With
End Sub
请问您有什么建议吗?
非常感谢!
---------------------编辑----------------------
Sub CompareAndHighlightDifferences()
Dim w1 As Worksheet, w2 As Worksheet
Dim c As Range
Set w1 = Sheets("2019 Project Detail")
Set w2 = Sheets("2019 Project Detail SOURCE")
For Each c In w1.Range("AD4", w1.Range("AD" & Rows.Count).End(xlUp))
If w1.Cells(c.Row, c.Column).Value = w2.Cells(c.Row, c.Column).Value Then
w1.Cells(c.Row, c.Column).Interior.Color = vbRed
End If
Next c
End Sub
答案 0 :(得分:1)
我会用这样的东西:
Sub CompareAndHighlightDifferences()
Dim w1 As Worksheet, w2 As Worksheet
Set w1 = Sheets("2019 Project Detail")
Set w2 = Sheets("2019 Project Detail SOURCE")
With w1
For Each cel In .UsedRange
If cel.Value <> w2.Cells(cel.Row, cel.Column).Value Then cel.Font.Color = vbRed
Next cel
End With
End Sub
编辑:如果工作表受到保护,则应在开头添加w1.Unprotect
,在结尾添加w1.Protect
。
答案 1 :(得分:1)
问题在于您正在另一张表中搜索值,因此即使它不在同一单元格地址中,它也会匹配。
如果有条件,您可以删除此内容和以下内容:
Set a = w2.Columns(30).Find(c.Value, LookAt:=xlWhole)
在比较值时使用相同的地址:
如果.Cells(c.Row,c.Column).Value <> w2.Cells( c .Row, c .Column) .Value 然后
/ e:另外,您可能希望使用interior
而不是font
颜色,因为如果单元格为空白,将有一个看不到的区别