用于将多个电子表格的第一列与主表格进行比较的VBA代码

我有用于比较第一列的VBA代码,并突出显示Sheet1第一列中的单元格,而Sheet1中没有这个单元格。

我是VBA新手,不擅长编码部分,需要这个工作在一个有多个电子表格(这可能从5到10)的Excel工作表。 sheet1是主表单,其他表单应与主表单进行比较,并突出显示主表单中不存在的单元格。

Public Sub CompareSheets() Dim ws1 As Worksheet, ws2 As Worksheet Dim cell As Range, rng As Range Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") Set rng = ws1.Range("A1:A20") For Each cell In rng Celladdress = cell.Address If cell <> ws2.Range(Celladdress) Then cell.Interior.Color = vbYellow ws2.Range(Celladdress).Interior.Color = vbYellow End If Next cell End Sub 

此代码避免逐行比较(根据您的意见),并查找Sheet1,Sheet3,Sheet4等的A列中的每个值,以便在Sheet1的A列中的某处find该值。 它还查找大于Sheet1中值的行总数的行。

这不会强制细胞到黄色。 相反,它使用条件格式在不匹配的单元格上显示vbYellow。 这些可以被过滤,就像强制vbYellow细胞可以。 这样做的好处是,一旦数值得到纠正(与Sheet1!A:A匹配),高亮将被自动除去。

 Option Explicit Sub CompareSheets() Dim lrw1 As Long, lrwn As Long, w As Long 'get the last row of values in master sheet With Worksheets(1) lrw1 = .Cells(.Rows.Count, "A").End(xlUp).Row End With 'the first worksheet (eg worksheets(1) ) is the 'master sheet' so we start at 2 For w = 2 To Worksheets.Count With Worksheets(w) lrwn = .Cells(.Rows.Count, "A").End(xlUp).Row With .Range(.Cells(1, "A"), .Cells(Application.Max(lrwn, lrwn), "A")) .FormatConditions.Delete With .FormatConditions.Add(Type:=xlExpression, _ Formula1:="=OR(ROW()>" & lrw1 & ", ISNA(MATCH($A1, " & Worksheets(1).Columns("A").Address(external:=True) & ", 0)))") With .Interior .PatternColorIndex = xlAutomatic .Color = vbYellow End With .StopIfTrue = True End With End With End With Next w End Sub 

FWIW,我发现你的叙述有点混乱。 它或者与提供的代码相矛盾或者自相矛盾。 这个build议的解决scheme背后的逻辑主要来自您的意见。