Excel 按唯一ID高亮显示2张图纸-新行、删除行、不匹配单元格

Excel 按唯一ID高亮显示2张图纸-新行、删除行、不匹配单元格,excel,vba,loops,compare,Excel,Vba,Loops,Compare,嗨,我在同一个文件中有两张纸-Sheet1和Sheet2。列A合并行中的两个单元格,为每行创建唯一的ID。我需要在第1页的每一行中循环并突出显示以下条件: 第1页上的行,而不是第2页-将第1页上该行的所有非空单元格高亮显示为绿色 第2页上的行,而不是第1页-将第2页上该行的所有非空单元格高亮显示为黄色 如果找到匹配项(不考虑行号),则仅突出显示该行中与红色不匹配的单元格列 我的代码在工作表1上的每个唯一ID行中循环,但是,当该行由于工作表1上不存在记录而不匹配时,它会错误地突出显示非错误的错误

嗨,我在同一个文件中有两张纸-Sheet1和Sheet2。列A合并行中的两个单元格,为每行创建唯一的ID。我需要在第1页的每一行中循环并突出显示以下条件:

  • 第1页上的行,而不是第2页-将第1页上该行的所有非空单元格高亮显示为绿色
  • 第2页上的行,而不是第1页-将第2页上该行的所有非空单元格高亮显示为黄色
  • 如果找到匹配项(不考虑行号),则仅突出显示该行中与红色不匹配的单元格列
  • 我的代码在工作表1上的每个唯一ID行中循环,但是,当该行由于工作表1上不存在记录而不匹配时,它会错误地突出显示非错误的错误

    Option Explicit
    
    Sub main2()
    Dim ds1 As Range, ds2 As Range, row As Range, col As Range, f As Range
    
    Set ds1 = Worksheets("Sheet1").Range("A1").CurrentRegion '<--| change "DataSet1" to your actual "Data Set 1" sheet name
    Set ds2 = Worksheets("Sheet2").Range("A1").CurrentRegion '<--| change "DataSet2" to your actual "Data Set 2" sheet name
    
    For Each row In ds1.Columns(1).Cells '<--| loop through "Data Set 1" "UniqueID" values (in its column 1)
        Set f = ds2.Columns(1).Find(what:=row.Value, LookIn:=xlValues, lookat:=xlWhole) '<--| look for current UniqueID in "Data Set 2" column 1
        If Not f Is Nothing Then '<-- if "Data Set 1" "UniqueID" found in "Data Set 2", then...
            For Each col In ds1.Rows(row.row).Cells '<--| ...loop through "Data Set 1" "UniqueID" row cells...
                If col.Value <> ds2(col.row, col.Column) Then '<--| ... if current cell value doesn't match corresponding "Data Set 2" one, then ...
                    col.Interior.Color = RGB(255, 0, 0) '<--| ...mark "Data Set 1" current cell...
                    ds2(col.row, col.Column).Interior.Color = RGB(255, 0, 0) '<--| ...mark corresponding "Data Set 2" one
                End If
            Next col
        End If
    Next row
    End Sub
    
    选项显式
    副主管2()
    尺寸ds1作为范围,ds2作为范围,行作为范围,列作为范围,f作为范围
    设置ds1=工作表(“Sheet1”)。范围(“A1”)。当前区域“此


    目前,您没有在任何地方使用
    f

    您能给出一个反映问题的简短数据示例吗(另请参见)?或者一个屏幕截图,显示你想要什么和你实际得到什么?还要注意,如果你只想比较两张工作表,office中有一个内置的工具,叫做电子表格比较:请参阅。•不是VBA解决方案,而是您最终要寻找的内容。@Pᴇʜ我编辑了帖子,并添加了潜在输出的屏幕截图。不,我不想在基于a列的空单元格中循环。@TimWilliams def忽略了这一点!感谢
    f
    是ColA中范围
    ds2
    中的匹配单元格,因此如果要突出显示该行中的单元格,需要使用
    f.row
    col
    ds1
    中的一个范围,因此您不能使用其
    行来定位
    ds2
    中的单元格。这些更新解决了代码中的问题。非常感谢。虽然它是为了标记新的或删除的行而编写的,但这使我更接近于我所关心的95%的更改。
    If col.Value <> ds2(col.row, col.Column) Then
    
    If col.Value <> ds2(f.row, col.Column) Then
    
    ds2(f.row, col.Column).Interior.Color = RGB(255, 0, 0)