2014-01-10 56 views
-1

我想比较三个工作表中的三个不同的数据列,并突出显示使用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,是不是在worksheet2worksheet1突出绿色,是不是在worksheet1数据,并在数据突出显示黄色worksheet2
  • 例如worksheet2中的一些数据以黄色突出显示,但在worksheet1中找到,这应该不会发生。然后在比较worksheet2worksheet3时,不在worksheet3中的项目有一个红色字体,在worksheet2中,而不在worksheet2中的项目用白色字体高亮显示为红色,在worksheet3中。
  • 例如,worksheet2中的数据具有红色字体,但在worksheet3中找到,这应该不会发生。

你能告诉我为什么我的VBA代码不工作,或者我可以做什么?

+0

谢谢BK201,你是如何编辑我的问题的方式?你也有任何建议,我的问题? – user3138463

+0

在发布时阅读帮助部分。所有的技巧都在那里。 :)另外,这里可以使用一些技巧。首先,虽然,不会简单的条件格式化工作?你有没有尝试过? :) – Manhattan

+0

我以为你不能使用条件格式为Excel 2007中的不同工作表? – user3138463

回答

0

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

假设你有一个这样的数据:

sample data

首先,对于每个这样创建一个Dynamic Named Range

dynamic range

这是你怎么做它:

  1. 转到公式>名称管理器
  2. 点击
  3. 输入数据的名称(我使用的数据1,数据2和数据3指数据在每个WS中)
  4. 使用此公式可使NAMED RANGE动态。
    对于数据1:=OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1)
    对于数据2:=OFFSET(Sheet2!$A$2,0,0,COUNTA(Sheet2!$A:$A)-1,1)
    对于数据3:=OFFSET(Sheet3!$A$2,0,0,COUNTA(Sheet3!$A:$A)-1,1)

THIS进一步了解。

二,报考CONDITIONAL FORMATTING像这样:

format

你将在第一个数据应用此Conditional FormattingSheet1Sheet2Sheet3
然后,使用Format Painter将其复制到具有数据的其他单元上。

公式工作表Sheet1 A2:=IF(ISERROR(MATCH($A2,Data2,0)),1,0)
注:这是突出的数据不SHEET2
选择格式(你希望它是亮显绿色)
公式Sheet2的A2:(记住我们有2个公式)
a。 =IF(ISERROR(MATCH($A2,Data1,0)),1,0)
注意:这是为了强调SHEET1中的数据(高亮显示黄色)。 b。 =IF(ISERROR(MATCH($A2,Data3,0)),1,0)
注:这是为了不Sheet3的红色字体数据
公式表Sheet 3 A2:=IF(ISERROR(MATCH($A2,Data2,0)),1,0)
注:这是突出和不SHEET2更改字体颜色为白色的数据。

重要提示:不要忘记设置格式!并注意公式上的$ signs

以上完成后,这里是结果:

result

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

+0

我和我的朋友在VBA中发现了这个问题,事实证明我需要设置一个范围来代替范围(“A2:A”和lastrow),只要将范围设置为范围(“A2:A10000”),似乎工作。谢谢你们所有的建议,非常感谢。 – user3138463

+0

@ user3138463 np :)我只是提出替代方案,但你总是可以在最舒服的地方工作。 – L42

+0

谢谢,我打算探索你和别人提出的替代方案。 :) – user3138463

相关问题