我有VBA代码,用于比较第一列,并突出显示sheet2的第一列中的单元格,这在sheet1中没有。
我是新的VBA和不擅长编码部分,需要在一个excel表工作,其中有多个电子表格(这可能从5到10)。sheet1是母版,其他工作表应与母版进行比较,并突出显示母版中不存在的单元格。
Public Sub CompareSheets()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim cell As Range, rng As Range
Set ws1 = Worksheets("Sheet1")
Set ws2 = Worksheets("Sheet2")
Set rng = ws1.Range("A1:A20")
For Each cell In rng
Celladdress = cell.Address
If cell <> ws2.Range(Celladdress) Then
cell.Interior.Color = vbYellow
ws2.Range(Celladdress).Interior.Color = vbYellow
End If
Next cell
End Sub
发布于 2017-03-30 12:27:48
这段代码避免了逐行比较(针对您的注释),并在Sheet2、Sheet3、Sheet4等的A列中查找Sheet1列A中的每个值。它还定位大于Sheet1中有值的行总数的行。
这并不会强迫单元格进行vbYellow。相反,它使用条件格式在非匹配单元格上显示vbYellow。它们可以像强制vbYellow单元一样被过滤。这里的好处是,一旦纠正了一个值(与Sheet1!A:A匹配),突出显示就会自动删除。
Option Explicit
Sub CompareSheets()
Dim lrw1 As Long, lrwn As Long, w As Long
'get the last row of values in master sheet
With Worksheets(1)
lrw1 = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
'the first worksheet (e.g. worksheets(1) ) is the 'master sheet' so we start at 2
For w = 2 To Worksheets.Count
With Worksheets(w)
lrwn = .Cells(.Rows.Count, "A").End(xlUp).Row
With .Range(.Cells(1, "A"), .Cells(Application.Max(lrwn, lrwn), "A"))
.FormatConditions.Delete
With .FormatConditions.Add(Type:=xlExpression, _
Formula1:="=OR(ROW()>" & lrw1 & ", ISNA(MATCH($A1, " & Worksheets(1).Columns("A").Address(external:=True) & ", 0)))")
With .Interior
.PatternColorIndex = xlAutomatic
.Color = vbYellow
End With
.StopIfTrue = True
End With
End With
End With
Next w
End Sub
我觉得你的叙述有点混乱。它要么与提供的代码相矛盾,要么自相矛盾。这个提议的解决方案背后的逻辑主要来自于您的评论。
https://stackoverflow.com/questions/43122263
复制相似问题