使用ID列

时间:2015-09-24 14:57:10

标签: excel vba excel-vba

我希望在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错误,ID 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 个答案:

答案 0 :(得分:0)

我假设ID是唯一的。

你基本上有两个解决方案,包括和没有宏。

使用Macro Logic可以如下:

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

还要检查两张纸是否具有相同的行数和列数;没有重复的行。

非宏解决方案:

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

= IF(Sheet 1中的 1 = VLOOKUP(Sheet 1中A1,Sheet2的一个:!!! Z,<强> 2 下,FALSE),&#34;同样&#34; &#34;不同&#34)

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

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