Excel 找出并突出差异

Excel 找出并突出差异,excel,vba,Excel,Vba,嗨,我知道有很多问题和我在这里问的是同一个话题,它们似乎不能解决我在这里的问题。 我的任务是根据两张表的D列比较两张表(a和B),我想找到并突出显示B中a中不存在的行。 代码如下所示: Dim i As Long Dim data As Range Dim ref As Range Dim lastRow As Long Worksheets("B").UsedRange Set ref = Worksheets("test").Columns("D:D").Value lastRow = Wo

嗨,我知道有很多问题和我在这里问的是同一个话题,它们似乎不能解决我在这里的问题。 我的任务是根据两张表的D列比较两张表(a和B),我想找到并突出显示B中a中不存在的行。 代码如下所示:

Dim i As Long
Dim data As Range
Dim ref As Range
Dim lastRow As Long
Worksheets("B").UsedRange
Set ref = Worksheets("test").Columns("D:D").Value
lastRow = Worksheets("B").UsedRange.Rows.Count

Application.ScreenUpdating = False
Application.DisplayAlerts = False

'     check if data exist in both shts
        For i = 10 To lastRow
            Set data = Worksheets("B").Columns("D:D").Find(ref,LookIn:=xlValues, _
        LookAt:=xlWhole)

            If data Is Nothing Then
                data.EntireRow.Interior.ColorIndex = 36
                Exit For
            Else
            End If
    Next
现在的问题是,设置ref的行有一个objectrequired错误,并且行没有高亮显示

屏幕更新功能在较短的运行时间内关闭,但运行我的代码仍然需要一些时间,这是文件的问题还是代码的问题

非常感谢您的建议

更新使用以下代码解决的任务:

    With Worksheets("test")
    For i = 4 To lastRow
        For j = 4 To lastnewRow
            If Worksheets("test").Cells(i, 9) = Worksheets("B").Cells(j, 9) Then
              Exit For
            Else
                If j = lastnewRow Then
                    Worksheets("test").Cells(i,9).EntireRow.Interior.ColorIndex = 36
                End If
            End If
        Next
    Next
End With
请尝试以下代码:

Dim shtARng As Range, cell As Range

With Worksheets("A") '<--| change "A" with your actual sheet name
    Set shtARng = .Range("D1", .Cells(.Rows.Count, 4).End(xlUp))) '<--| change "D1" to the column D actual initial row to start your check from
End With

With Worksheets("B") '<--| change "B" with your actual sheet name
    For Each cell in .Range("D1", .Cells(.Rows.Count, 4).End(xlUp)))
        If shtARng.Find(What:=cell.Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) Is Nothing Then cell.EntireRow.Interior.ColorIndex = 36
    Next cell
End With
Dim shtARng作为范围,单元格作为范围
使用工作表(“A”)尝试以下代码:

Dim shtARng As Range, cell As Range

With Worksheets("A") '<--| change "A" with your actual sheet name
    Set shtARng = .Range("D1", .Cells(.Rows.Count, 4).End(xlUp))) '<--| change "D1" to the column D actual initial row to start your check from
End With

With Worksheets("B") '<--| change "B" with your actual sheet name
    For Each cell in .Range("D1", .Cells(.Rows.Count, 4).End(xlUp)))
        If shtARng.Find(What:=cell.Value, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) Is Nothing Then cell.EntireRow.Interior.ColorIndex = 36
    Next cell
End With
Dim shtARng作为范围,单元格作为范围

有了工作表(“A”)您就可以在没有VBA的情况下轻松完成这项工作。您将在excel中使用的功能称为条件格式

因此,如果要突出显示
工作表2
中不在
工作表1
列A中的所有单元格,可以选择
工作表1
中的单元格,在条件格式窗口中创建新规则并选择

“使用公式确定要格式化的单元格”

然后插入以下公式

=ISNA(MATCH(A1,Sheet1!A:A,0))
在“格式”下,选择要应用于符合此条件的单元格的样式

  • MATCH
    搜索单元格
    A1
    中的值(以及您选择的所有其他单元格),并检查它们是否存在于数组
    Sheet1!A:A
    哪一列是整个A列
  • 如果找不到值,则返回
    #N/A
    ,因此我们希望表达式为true。这就是为什么我们使用函数
    ISNA(expression)
    ,在这种情况下返回true

    • 无需VBA即可轻松完成此操作。您将在excel中使用的功能称为条件格式

      因此,如果要突出显示
      工作表2
      中不在
      工作表1
      列A中的所有单元格,可以选择
      工作表1
      中的单元格,在条件格式窗口中创建新规则并选择

      “使用公式确定要格式化的单元格”

      然后插入以下公式

      =ISNA(MATCH(A1,Sheet1!A:A,0))
      
      在“格式”下,选择要应用于符合此条件的单元格的样式

      • MATCH
        搜索单元格
        A1
        中的值(以及您选择的所有其他单元格),并检查它们是否存在于数组
        Sheet1!A:A
        哪一列是整个A列
      • 如果找不到值,则返回
        #N/A
        ,因此我们希望表达式为true。这就是为什么我们使用函数
        ISNA(expression)
        ,在这种情况下返回true


      您试图访问数据的属性,但前提是数据没有任何意义。这是因为我试图处理仅存在于表B中的行,代码不正确吗?我理解,但这只是我代码的一部分。我要做的是检查A表中的列表是否包含B表中的所有内容,如果没有,则突出显示工作表B中不存在的行,稍后我将不得不处理该数据。您尝试仅在“数据为零”的情况下访问数据的属性,这完全没有意义。这是因为我试图处理仅存在于工作表B中的行,代码不对吗?我明白,但这只是我代码的一部分。我要做的是检查表A中的列表是否包含表B中列表的所有内容,如果没有,则突出显示表B中不存在的行,我稍后将不得不处理这些数据。谢谢!代码解决了突出显示的问题,但它似乎突出显示了我的整个excel表。。。有什么建议吗?我不在我的电脑旁,所以你只需在代码中放置一些断点,然后用F8单步执行,看看发生了什么!在单步执行代码时,使用即时窗口查询变量值(例如:“?shtARng.Address”、“?cell.Address、cell.Value”),我认为问题在于,当我设置shtRng的范围时,它不会向我返回任何信息,这就是为什么整张表都会突出显示的原因,但为什么会是这样?还是我正在比较的单元格中的值在excel中不“可比”?因为它包含字母和数字,并且有-、()和/。谢谢!代码解决了突出显示的问题,但它似乎突出显示了我的整个excel表。。。有什么建议吗?我不在我的电脑旁,所以你只需在代码中放置一些断点,然后用F8单步执行,看看发生了什么!在单步执行代码时,使用即时窗口查询变量值(例如:“?shtARng.Address”、“?cell.Address、cell.Value”),我认为问题在于,当我设置shtRng的范围时,它不会向我返回任何信息,这就是为什么整张表都会突出显示的原因,但为什么会是这样?还是我正在比较的单元格中的值在excel中不“可比”?因为它包含字母和数字,并且有-、()和/。感谢您的详细回答:)我知道这个函数,但我只是尝试自动化这个过程,因为在突出显示数据后,我想将其复制到第三个工作表,所以如果可以在vb编辑器的同一模块中完成,那就太好了,但是谢谢你的回答;)谢谢你的详细回答:)我知道这个函数,但我只是尝试自动化这个过程,因为在突出显示数据后,我想将其复制到第三个工作表,因此如果可以在vb编辑器的同一模块中完成,那就太好了,但回答时请使用thx;)