使用ID列比较两张纸

我想在Excel 2013中对工作簿中的2张进行比较 . 由于VLOOKUP和其他公式的记录数量很慢,所以我想我会尝试使用VB来查看这是否是一个更快的解决方案 .

我想要做的是按ID分析每个记录,用红色突出显示和不匹配 . 由于列名和位置不同,我还想通过指定要比较的列名来对每条记录进行单元格比较 . 最后,我想将每列的不匹配总数归为第3页 .

例如:

Sheet 1:  
ID  Col1  Col2  Col3  Col4 
1   1     1     1     1  
2   2     2     2     1 
3   3     3     3     3 
4   4     4     4     4

Sheet 2: 
DBID  Col1   Col2  Field  Col3
1     1      1      1      1
2     2      2      2      2
4     4      4      4      4 
3     3      3      3      3

因此,在上面的示例中,我只想将Col4与Field列进行比较,并且只看到ID 2的Field列突出显示为错误,ID记录3和4被忽略,因为它们匹配且位于文件中的不同位置 .

我通常会对ID进行排序,而不是选择一个特定的ID,但是会意识到可能会丢失记录,这意味着数据将会错位 .

目前我发现这个代码会突出显示红色的不匹配,但逐个单元格匹配,而不考虑列和记录可能不是相同的顺序 .

Sub RunCompare() 'Call the compareSheets routine Call compareSheets("Sheet1", "Sheet2") End Sub

  Sub compareSheets(shtBefore As String, shtAfter As String) Dim mycell As Range Dim mydiffs As Integer   'If current cell is not a date then proceed (else skip and go to next), then 'if not same as corresponding cell in sheet After, 'mark as yellow and repeat until entire range is used   For Each mycell In ActiveWorkbook.Worksheets(shtAfter).UsedRange If Not IsDate(mycell) Then
    If Not mycell.Value = ActiveWorkbook.Worksheets(shtBefore).Cells(mycell.Row, mycell.Column).Value Then

        mycell.Interior.Color = vbRed
        mydiffs = mydiffs + 1

    End If End If Next   'Display a message box stating the number of differences found MsgBox mydiffs & " differences found", vbInformation ActiveWorkbook.Sheets(shtAfter).Select End Sub

回答(1)

2 years ago

我假设ID是唯一的 .

你基本上有两个解决方案,有和没有宏 .

使用Macro Logic可以如下:

获取第一个工作表的第一个(唯一)列循环通过第一个(唯一)列并在第二个工作表中找到匹配的行比较该行中的单元格与第一个工作表的第一行对所有行重复相同的步骤

还要检查两个工作表是否具有相同数量的行和列;并且没有重复的行 .

非宏解决方案:

使用VLookup函数查找与值匹配的行,并在新工作表中执行相等的比较公式

= IF(Sheet1! B 1 = VLOOKUP(Sheet1!A1,Sheet2!A:Z, 2 ,FALSE),_ 27616100,"Different")

请注意,您需要在第三个(答案)表的第一列中增加我突出显示的行号和列名 .

获得值后,可以使用条件格式设置突出显示“与红色不同”