我试图在三个工作表中比较三个不同的数据列,并使用VBA突出显示差异。我对VBA很新,我对编程知之甚少。到目前为止,这就是我所做的:
worksheet1
:
Sub compare_cols()
Dim myRng As Range
Dim lastCell As Long
'Get the last row
Dim lastRow As Integer
lastRow = ActiveSheet.UsedRange.Rows.Count
'Debug.Print "Last Row is " & lastRow
Dim c As Range
Dim d As Range
Application.ScreenUpdating = False
For Each c In Worksheets("worksheet1").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
c.Interior.Color = vbGreen
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
Exit For
End If
Next
Next
For Each c In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet1").Range("A2:A" & lastRow).Cells
c.Interior.Color = vbYellow
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
Exit For
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Worksheet 2:
Sub compare_cols()
Dim myRng As Range
Dim lastCell As Long
'Get the last row
Dim lastRow As Integer
lastRow = ActiveSheet.UsedRange.Rows.Count
'Debug.Print "Last Row is " & lastRow
Dim c As Range
Dim d As Range
Application.ScreenUpdating = False
For Each c In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet3").Range("A2:A" & lastRow).Cells
c.Font.Color = rgbRed
If (InStr(1, d, c, 1) > 0) Then
c.Font.Color = rgbBlack
Exit For
End If
Next
Next
For Each c In Worksheets("worksheet3").Range("A2:A" & lastRow).Cells
For Each d In Worksheets("worksheet2").Range("A2:A" & lastRow).Cells
c.Interior.Color = vbRed
c.Font.Color = rgbWhite
If (InStr(1, d, c, 1) > 0) Then
c.Interior.Color = vbWhite
c.Font.Color = rgbBlack
Exit For
End If
Next
Next
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
我遇到的问题:
worksheet1
和worksheet2
时,不在worksheet2
中的数据在worksheet1
中突出显示为绿色,而在worksheet1
中的数据则突出显示worksheet2
中的黄色。worksheet2
中的某些数据以黄色突出显示,但在worksheet1
中找到,这不应该发生。然后,在比较worksheet2
和worksheet3
时,不在worksheet3
中的项目在worksheet2
中有红色字体,而在worksheet2
中不在的项目是在worksheet3
中以白色字体突出显示为红色。worksheet2
中的数据例如有红色字体,但可以在worksheet3
中找到,这不应该发生。你能告诉我为什么我的VBA代码不起作用,或者我能做什么呢?
答案 0 :(得分:0)
这是我没有VBA的解决方案:
假设您有这样的数据:
首先,为每个人创建Dynamic Named Range
,如下所示:
这是你如何做到的:
NAMED RANGE
动态
对于Data1: =OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1)
=OFFSET(Sheet2!$A$2,0,0,COUNTA(Sheet2!$A:$A)-1,1)
=OFFSET(Sheet3!$A$2,0,0,COUNTA(Sheet3!$A:$A)-1,1)
阅读THIS以进一步了解具体方法。
其次,应用 CONDITIONAL FORMATTING
,如下所示:
您将在Conditional Formatting
,Sheet1
和Sheet2
的第一个数据中应用此Sheet3
。
然后,使用Format Painter
将其复制到其他包含数据的单元格上。
Sheet1 A2的公式: =IF(ISERROR(MATCH($A2,Data2,0)),1,0)
注意:这是为了突出显示不在SHEET2中的数据
选择格式(您希望它是高亮绿色)
Sheet2 A2的公式:(记住我们有2个公式)
一个。 =IF(ISERROR(MATCH($A2,Data1,0)),1,0)
注意:这是针对不在SHEET1中的高亮数据(高亮显示黄色)
湾=IF(ISERROR(MATCH($A2,Data3,0)),1,0)
注意:这是为了使红色字体数据不在SHEET3中
Sheet3 A2的公式: =IF(ISERROR(MATCH($A2,Data2,0)),1,0)
注意:这是为了突出显示并在不在SHEET2中的数据上将字体颜色更改为白色。
重要提示:不要忘记设置格式!并注意公式上的$ signs
。
完成上述操作后,结果如下:
尝试在每张纸上添加数据,您会发现Conditional Formatting
自动应用
至少在我的结果是这样的。
所以当你添加新数据时不用担心
如果它不会自动应用,您可以简单地使用Format Painter
希望这对你有用。