根据常见的“ id”字段比较两个不常见单元格的excelsheet(C列)

时间:2018-08-04 20:10:40

标签: excel vba excel-vba

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

我将每周进行一次比较,因此每次要比较的项目数也不同时,行数也会有所不同。

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

如果可能的话,也没有以上的优先级: 如果“比较”电子表格中没有找到“ upsert”电子表格中的项目ID,请突出显示这些ID。另外,如果在“比较”电子表格中找到的项目ID在“ upsert”电子表格中找不到,请在“比较”电子表格中突出显示。

请让我知道是否有问题。

1 个答案:

答案 0 :(得分:0)

这应该可以解决问题。将代码粘贴到Module中,应该可以正常使用。


如果在Upsert上存在一个项目ID ,而在Compare上不存在:项目ID将在Upsert上突出显示为红色

如果两个表上都存在一个 Project ID ,则将比较38列(从A开始并向外移动)。如果列不匹配,则相关单元格将在Upsert上突出显示黄色。如果您的列跨度增加,则需要在38循环中调整For i


我没有包括您的最后一个询问(如果它存在于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

运行时间:少于一秒(2,000行)

这可能是通过将列值加载到数组中并通过数组比较(按项)来进行数组处理而加快的。我不知道您期望拥有多少行,这些行最终将决定该行的速度。如果这对您来说很慢,我将提供数组比较而不是逐个单元比较。