突出显示工作表中列的差异

时间:2014-01-10 06:10:48

标签: excel vba excel-vba excel-2007

我试图在三个工作表中比较三个不同的数据列,并使用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  

我遇到的问题:

  • 在比较worksheet1worksheet2时,不在worksheet2中的数据在worksheet1中突出显示为绿色,而在worksheet1中的数据则突出显示worksheet2中的黄色。
  • 例如worksheet2中的某些数据以黄色突出显示,但在worksheet1中找到,这不应该发生。然后,在比较worksheet2worksheet3时,不在worksheet3中的项目在worksheet2中有红色字体,而在worksheet2中不在的项目是在worksheet3中以白色字体突出显示为红色。
  • worksheet2中的数据例如有红色字体,但可以在worksheet3中找到,这不应该发生。

你能告诉我为什么我的VBA代码不起作用,或者我能做什么呢?

1 个答案:

答案 0 :(得分:0)

这是我没有VBA的解决方案:

假设您有这样的数据:

sample data

首先,为每个人创建Dynamic Named Range,如下所示:

dynamic range

这是你如何做到的:

  1. 转到 FORMULAS > NAME MANAGER
  2. 点击
  3. 输入数据名称(我使用Data1,Data2和Data3分别引用每个WS中的数据)
  4. 使用此公式可使NAMED RANGE动态 对于Data1: =OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1)
    对于Data2: =OFFSET(Sheet2!$A$2,0,0,COUNTA(Sheet2!$A:$A)-1,1)
    对于Data3: =OFFSET(Sheet3!$A$2,0,0,COUNTA(Sheet3!$A:$A)-1,1)
  5. 阅读THIS以进一步了解具体方法。

    其次,应用 CONDITIONAL FORMATTING ,如下所示:

    format

    您将在Conditional FormattingSheet1Sheet2的第一个数据中应用此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

    完成上述操作后,结果如下:

    result

    尝试在每张纸上添加数据,您会发现Conditional Formatting自动应用 至少在我的结果是这样的。
    所以当你添加新数据时不用担心 如果它不会自动应用,您可以简单地使用Format Painter 希望这对你有用。