【问题标题】:Excel VBA - Compare worksheet rows based off of valueExcel VBA - 根据值比较工作表行
【发布时间】:2011-11-11 06:09:12
【问题描述】:

与这些类似的问题:

Find the differences between 2 Excel worksheets?

Compare two excel sheets

特别是我的问题,我有一个包含唯一 ID 的每月员工列表和大约 900 名员工的大约 30 列其他数据。

我正在努力完成两件事:

  1. 比较是否在列表之间添加或删除了员工。
  2. 在每个员工的工作表之间比较该员工的其他数据更改。即职位名称已更改。

我发现大多数比较加载项/模块仅按顺序比较特定范围,因此如果发现一次差异,则每个后续行都会有所不同。

首先,我想知道是否有任何现有的工具可以做到这一点。如果不是,我正在考虑建立自己的。我正在考虑通过遍历每个员工并使用 vlookup 来验证匹配来做到这一点。我担心这样做很多循环会使宏难以使用。关于我应该如何去做的任何指导?谢谢。

【问题讨论】:

  • 是否保证所有列的顺序相同?
  • 是的,列保持静态。

标签: vba excel


【解决方案1】:

未经测试,但会给你一个起点... 这不会找到在“旧”表上但不在“当前”表上的前雇员。

Sub CompareEmployeeInfo()

    Const ID_COL As Integer = 1 ' ID is in the first column
    Const NUM_COLS As Integer = 30 'how many columns are being compared?

    Dim shtNew As Excel.Worksheet, shtOld As Excel.Worksheet
    Dim rwNew As Range, rwOld As Range, f As Range
    Dim x As Integer, Id
    Dim valOld, valNew

    Set shtNew = ActiveWorkbook.Sheets("Employees")
    Set shtOld = ActiveWorkbook.Sheets("Employees")

    Set rwNew = shtNew.Rows(2) 'first employee on "current" sheet

    Do While rwNew.Cells(ID_COL).Value <> ""

        Id = rwNew.Cells(ID_COL).Value
        Set f = shtOld.UsedRange.Columns(ID_COL).Find(Id, , xlValues, xlWhole)
        If Not f Is Nothing Then
            Set rwOld = f.EntireRow

            For x = 1 To NUM_COLS
                If rwNew.Cells(x).Value <> rwOld.Cells(x).Value Then
                    rwNew.Cells.Interior.Color = vbYellow
                Else
                    rwNew.Cells.Interior.ColorIndex = xlNone                    
                End If
            Next x

        Else
            rwNew.Cells(ID_COL).Interior.Color = vbGreen 'new employee
        End If

        Set rwNew = rwNew.Offset(1, 0) 'next row to compare
    Loop

End Sub

【讨论】:

    【解决方案2】:

    不知道是否有任何东西可以为您做到这一点。但是,您可以使用Dictionary Object 来简化此比较任务。您还可以从this answer that uses Dictionaries 中获取示例,该示例检查了唯一性并针对速度进行了优化,将其更改为您需要的内容。然后你可以use this fast method 为单元格着色或任何你想用它做的事情。

    我知道我不会为您提供代码,但这些提示可以帮助您入门,如果您有更多问题,我可以帮助您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多