基于公共"id"字段比较不常见单元格的两个Excel表(C列)



所以我有两个工作表。第一个是"Upsert",第二个是"Compare"。

我每周都会做这个比较,所以每次的行数都会不同,也就是说要比较的项目数量会不同。

这两个工作表都有一个带有项目ID(唯一(的C列。我想做的是,宏在"Upsert"电子表格的C列中找到一个项目ID,如果它在"Compare"电子表格中的C列找到相同的项目ID,然后比较整行,以确保所有内容都与"Compare(比较("电子表格相匹配(两张表上的列顺序相同,希望这会有所帮助(。如果我们正在比较的行中的任何单元格不匹配,请在"Upsert"电子表格中突出显示黄色。每个工作表有38列。

不是上述的重大优先事项,但如果可能的话:如果"upstart"电子表格中存在"compare"电子表格未找到的项目ID,请突出显示这些ID。此外,如果在"比较"电子表格中找到的项目ID在"追加"电子表格上找不到,请在"比较"电子表格中突出显示。

如果有问题,请告诉我。

这样就可以了。将代码粘贴到Module中,并应按原样工作。


如果Upsert上存在项目IDCompare上不存在:项目ID将在Upsert上突出显示红色

如果两张图纸上都存在项目ID,则将比较38列(从a开始并向外移动(。如果列不匹配,则有问题的单元格将在Upsert上突出显示黄色。如果列跨度增加,则需要调整For i循环中的38


我没有包括您的最后一个请求(如果它存在于Compare上而不存在于Upsert上,则在Compare上突出显示黄色(。你应该能够使用下面的代码和互联网来解决这个问题。

Option Explicit
Sub Compare()
Dim Upsert As Worksheet: Set Upsert = ThisWorkbook.Sheets("Upsert")
Dim Compare As Worksheet: Set Compare = ThisWorkbook.Sheets("Compare")
Dim ProjectIDs As Range: Set ProjectIDs = Upsert.Range("K2:K" & Upsert.Range("K" & Upsert.Rows.Count).End(xlUp).Row)
Dim SearchRange As Range: Set SearchRange = Compare.Range("K:K")
Dim Project As Range, Found As Range, i As Long
Application.ScreenUpdating = False
For Each Project In ProjectIDs
Set Found = SearchRange.Find(Project, Lookat:=xlWhole)
If Not Found Is Nothing Then           'If Project ID is found
For i = 1 To 38                    'Compare Columns
If Upsert.Cells(Project.Row, i).Value2 <> Compare.Cells(Found.Row, i).Value2 Then
Upsert.Cells(Project.Row, i).Interior.Color = vbYellow
End If
Next i                             'Next Column Comparison
Else                                   'If a project ID is not found
Project.Interior.Color = vbRed
End If
Next Project
Application.ScreenUpdating = True
MsgBox "Please show an attempt next time", vbCritical
End Sub

运行时间:对于2000行,不到一秒钟

这可能会通过在数组中加载列值并进行逐数组比较(按项(来加快速度。我不知道你期望有多少行,这将最终决定这一过程的速度。如果这对你来说很慢,我会进行数组比较,而不是逐单元格比较,这就是我所提供的。

最新更新