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

标签 vba excel

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

我是 VBA 新手,不擅长编码部分,需要它在具有多个电子表格的 Excel 工作表中工作(可能从 5 到 10 个不等)。 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

最佳答案

此代码避免了逐行比较(根据您的注释),并在 Sheet2、Sheet3、Sheet4 等的 A 列中查找每个值,以便在 Sheet1 的 A 列中找到。它还会查找大于 Sheet1 中包含值的行总数的行。

这不会强制单元格变为 vbYellow。相反,它使用条件格式在不匹配的单元格上显示 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 (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,我发现你的叙述有点令人困惑。它要么与所提供的代码相矛盾,要么与自身相矛盾。这个提议的解决方案背后的逻辑主要来自您的评论。

关于用于将多个电子表格的第一列与母版表进行比较的 VBA 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43122263/

相关文章:

vba - 将 MapVirtualKeyA 与 Shift 和 Ctrl Alt 一起使用

vba - 在循环中使用 if 语句会产生无效参数错误

excel - 按钮可见属性在 Excel VBA 中不起作用

vba - 为什么我看不到 Microsoft Forms 2.0 对象库?

VBA 运行循环,直到达到实例数

vba - 如何让平方符号 (²) 在字符串中显示

php - 如何将Excel数据转置为MySQL数据库? (需要PHP脚本)

excel - 如何将“Worksheet_SelectionChange 事件”中 "Target"范围的内容传递给子?

c# - 使用C#在Excel工作表中添加下拉列表

vba - 如何从函数返回字典?