【问题标题】:VBA code for comparing first column of multiple spreadsheet with mastersheet用于将多个电子表格的第一列与主表进行比较的 VBA 代码
【发布时间】:2017-03-31 04:27:48
【问题描述】:

我有用于比较第一列的 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 的 A 列中的值可以在 sheet1 的 A 列中的任何位置?
  • 它可以在工作表中的任何位置。只是我想将 sheet2 的单元格与 sheet 1 进行比较,并突出显示它是否存在于 sheet1 中。我想要可以应用于多个电子表格的代码修改(例如:Sheet1、sheet2、sheet3....sheetN)

标签: vba excel


【解决方案1】:

此代码避免了逐行比较(根据您的 cmets),并在 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,我发现你的叙述有点混乱。它要么与提供的代码相矛盾,要么与自身相矛盾。这个提议的解决方案背后的逻辑主要来自您的 cmets。

【讨论】:

  • 谢谢它的工作,我面临的唯一问题可能是我无法以更好的方式解释这些事情我是编码新手,Sheet1 列“主表”有 100 个单元格和其他电子表格大约有 153 个单元格,此代码在第 100 行之前可以完美运行。在第 100 行之后,它突出显示了工作表 2 中的所有单元格。在实际情况下,工作表 2 ..工作表 N 可能比工作表 1 有更多或更少的单元格
  • 这实际上就是它的设计目的。转到工作表并查看主页、样式、条件格式。如果行号超过主表中的最大行号,您应该能够通过删除状态为 TRUE 的部分来调整公式。调整代码以适应您的需求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2013-05-24
  • 2022-01-09
相关资源
最近更新 更多