与此类似的问题:
Find the differences between 2 Excel worksheets?
我的问题具体来说,我每月都有一份员工名单,其中包含一个唯一的ID,大约有30列其他数据,大约有900名员工。
我正在努力完成两件事:
大多数比较加载项/模块我发现只按顺序比较特定范围,因此如果每次后续行发现一次差异就会有所不同。
首先,我想知道是否有任何现有工具可以做到这一点。如果不是,我正在考虑建立自己的。我想通过循环每个员工并使用vlookup验证匹配来做到这一点。我担心这样做很多循环会使宏难以使用。关于我应该怎么做的任何指导?感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
不知道是否有任何事情可以帮助你。但是,您可以使用Dictionary Object
使此比较任务更容易。您还可以从this answer that uses Dictionaries
中选择检查唯一身份并根据速度进行优化的示例,将其更改为您需要的内容。然后你可以use this fast method为细胞着色或用它做任何你想做的事。
我知道我不是为你提供代码,但是这些指针会让你开始,如果你有更多问题,我可以帮助你。