Excel 按唯一ID高亮显示2张图纸-新行、删除行、不匹配单元格
嗨,我在同一个文件中有两张纸-Sheet1和Sheet2。列A合并行中的两个单元格,为每行创建唯一的ID。我需要在第1页的每一行中循环并突出显示以下条件: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上不存在记录而不匹配时,它会错误地突出显示非错误的错误
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)