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

用于将多个电子表格的第一列与母版进行比较的VBA代码,vba,excel,Vba,Excel,我有VBA代码,用于比较第一列,并突出显示sheet2第一列中的单元格,该单元格不在sheet1中 我是VBA新手,不擅长对零件进行编码,需要在包含多个电子表格的excel工作表中使用它(这可能从5到10不等)。 表1为母版纸,其他表应与母版纸进行比较,并突出显示母版纸中不存在的单元格 Public Sub CompareSheets() Dim ws1 As Worksheet, ws2 As Worksheet Dim cell As Range, rng As R

我有VBA代码,用于比较第一列,并突出显示sheet2第一列中的单元格,该单元格不在sheet1中

我是VBA新手,不擅长对零件进行编码,需要在包含多个电子表格的excel工作表中使用它(这可能从5到10不等)。 表1为母版纸,其他表应与母版纸进行比较,并突出显示母版纸中不存在的单元格

    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
公共子比较表()
将ws1标注为工作表,将ws2标注为工作表
变暗单元格作为范围,rng作为范围
设置ws1=工作表(“表1”)
设置ws2=工作表(“表2”)
设置rng=ws1.范围(“A1:A20”)
对于rng中的每个单元
Celladdress=单元格地址
如果单元格ws2.Range(单元格地址),则
cell.Interior.Color=vbYellow
ws2.Range(Celladdress).Interior.Color=vbYellow
如果结束
下一个细胞
端接头

此代码避免逐行比较(根据您的注释),并在Sheet2、Sheet3、Sheet4等的a列中查找Sheet1的a列某处的每个值。它还定位大于Sheet1中具有值的行总数的行

这不会强制单元格变为黄色。相反,它使用条件格式在不匹配的单元格上显示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 (e.g. 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,我觉得你的叙述有点混乱。它要么与提供的代码相矛盾,要么与自身相矛盾。此建议解决方案背后的逻辑主要来自您的评论。

是否必须进行“逐行”比较,或者sheet2的a列中的值是否可以位于sheet1的a列中的任何位置?它可以位于工作表中的任何位置。我只想比较sheet2和sheet1的单元格,如果sheet1中没有单元格,则高亮显示。我想修改代码,它可以适用于多个电子表格(例如:Sheet1,sheet2,sheet3…sheetN)感谢它的工作,唯一的问题是我面临的可能是我无法更好地解释的东西,我是新的编码,Sheet1栏A“母版纸”有100个单元格,其他电子表格有大约153个单元格,这个代码在第100行之前都是完美的。在第100行之后,它将高亮显示第2页中的所有单元格。在实际情况下,表2.表N可能有更多的单元格或更少的单元格,而表1则实际是这样设计的。转到工作表,查看主页、样式和条件格式。如果行数超过母版图纸中的最大行数,则可以通过删除表示为TRUE的部分来调整公式。调整代码以适应,您将被设置。