Excel VBA – 比较基于值的工作表行

类似的问题:

find两个Excel工作表之间的区别?

比较两个Excel表

我的问题,具体来说,我有一个每月员工名单与一个独特的ID和大约900名员工约30列的其他数据。

我试图完成两件事情:

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

大多数比较加载项/模块,我发现只有比较特定的范围顺序,因此,一旦一旦发现每一个后续行将有所不同。

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

未经testing,但会给你一个地方从…开始…这不会find前“雇员”,而不是在“当前”工作表上。

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 

不知道是否有任何事情为你做。 但是,您可以使用Dictionary Object来简化比较任务。 你也可以从这个答案的例子,使用Dictionaries ,检查独特的和速度进行了优化,改变它到你需要的。 然后,您可以使用这种快速方法来对单元格进行着色,或者使用它来执行任何操作。

我知道我没有为你提供代码,但是这些指针会让你开始,如果你有更多的问题,我可以帮你。