2013-03-11 30 views
0

我有一个带有两个工作表的文件,它们都是名称和地址。如果该行的单元格A与第二个表格的列A中的任何行不匹配,则需要一个将突出显示第一个表格中的行的宏。突出显示其他工作表中不存在的行的宏

因此,如果一行中的第一个单元格在sheet2的A列中的任何数据中没有匹配的数据,那么该行将突出显示为红色。

另外我可能想在将来扩展这个,所以我可以指定Sheet1可以是活动工作表,但sheet2是由工作表名称调用的吗?

+2

是否必须是一个宏。这可以通过公式和条件格式轻松完成。它也可以自动应用于一个必须运行的宏(尽管它可以绑定到一个事件以便自动运行)。 – SomeSillyName 2013-03-11 16:45:43

+1

我同意@SomeSillyName。如果结果显示列A不匹配,请在工作表中放入VLOOKUP或INDEX/MATCH公式并使用条件格式。 – 2013-03-11 17:07:32

+0

根本不需要宏。遵循@philip的想法 – 2013-03-11 17:13:52

回答

1

试试下面的代码:

Sub Sample() 

    Dim lastRow As Integer 
    Dim rng As Range 
    lastRow = Sheets("Sheet1").Range("A65000").End(xlUp).Row 

    For i = 1 To lastRow 
     Set rng = Sheets("sheet2").Range("A:A").Find(Sheets("Sheet1").Cells(i, 1)) 
     If rng Is Nothing Then 
      Sheets("Sheet1").Cells(i, 1).EntireRow.Interior.Color = vbRed 
     End If 
    Next 
End Sub 
+0

这工作很好! – jardane 2013-03-11 17:27:20

+0

@jardane如果您同意解决方案,请接受/投票。 – 2013-03-11 17:29:20

0

这里是一个丑陋的蛮力方法:

Dim r As Range 
Dim s As Range 

For Each r In ActiveSheet.UsedRange.Rows 
    For Each s In Sheets("Sheet2").UsedRange.Rows 
    If r.Cells(1, 1).Value = s.Cells(1, 1).Value Then 
     r.Interior.ColorIndex = 3 
    End If 
    Next s 
Next r 

这里有一个巧妙方式:

Dim r As Range 
Dim s As Range 

Set s = Sheets("Sheet2").Columns(1) 

For Each r In ActiveSheet.UsedRange.Rows 
    If Not (s.Find(r.Cells(1, 1).Value) Is Nothing) Then 
    r.Interior.ColorIndex = 3 
    End If 
Next r 
+0

不起作用,无论发生什么,都会使每件事物都变成红色。 – jardane 2013-03-11 17:15:13

+0

@jardane,我测试了这两种方法,我能想到的是,您的工作表没有像您的问题所述(或所有行匹配)组织。 – 2013-03-11 17:16:47

+0

看看下面我的答案,而不是使用宏,使用Excel的工作表公式VLOOKUP搜索,并使用条件格式,如果不匹配 – 2013-03-11 17:16:49

0

下面是一个使用工作表公式的方法:

=IF(ISERROR(VLOOKUP(A:A,Sheet2!A:A,1,FALSE)),"NOT FOUND",VLOOKUP(A:A,Sheet2!A:A,1,FALSE)) 

然后你会使用条件格式来打开单元格,如果列A没有找到匹配!

HTH

菲利普

0

这个怎么样:

Sub CondFormatting() 


Range("D1:D" & Range("A1").End(xlDown).Row).Formula = "=IF(ISERROR(VLOOKUP(A:A,Sheet2!A:A,1,FALSE)),""NOT FOUND"",VLOOKUP(A:A,Sheet2!A:A,1,FALSE))" 

With Columns("D:D") 
    .FormatConditions.Delete 
    .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=""NOT FOUND""" 
    .FormatConditions(1).Interior.ColorIndex = 3 
End With 

    Range("I16").Select 
End Sub