有两组数据,一组是原来工作表中存储的,一组是从办公系统中下载的,这两组数据应该完全一样,但实际发现存在几个不相同的数据,现在想要找出这些不相同的数据,可是数据有上千条,一个个对照的话,速度慢不说,还不容易找全。
实际上,这就是在工作表中比较两列数据。将工作表中存储的数据放在一列,将下载的数据放在另一列,比较这两列数据。
我们来看看一组简化的数据比较,介绍实现方法。
最简单的方法是使用Excel的条件格式功能。如下图1所示,在列A和列C中有两组数据,要找出这两个区域中不相同的数据。
图1
第1步:选择单元格区域A1:A10,按住Ctrl键,再选择单元格区域C1:C10。
第2步:选取功能区“开始”选项卡中的“条件格式——突出显示单元格规则——重复值”命令,如下图2所示。
图2
第3步:在弹出的”重复值”对话框中,在左侧的下拉列表中选择“唯一”,右侧的“设置为”列表中选择适当的颜色选项,如下图3所示。
图3
单击“确定”按钮,结果如下图4所示,标识出了两组数据中不相同的值。
图4
接下来,我们使用VBA代码分别找出两组数据中不相同的值并输出。这里使用字典来实现,代码如下:
Sub GetDifferentItems()
'字典对象变量
Dim dict1 As Object
Dim dict2 As Object
'单元格对象变量
Dim rngA As Range
Dim rngC As Range
Dim rngFind As Range
Dim rng As Range
'创建字典
Set dict1 =CreateObject("scripting.dictionary")
Set dict2 =CreateObject("scripting.dictionary")
'赋值要比较的两个单元格区域
Set rngA =Worksheets("Sheet1").Range("A1:A10")
Set rngC =Worksheets("Sheet1").Range("C1:C10")
'比较并将不同的值存储在字典中
For Each rng In rngA
Set rngFind =rngC.Find(What:=rng.Value)
If rngFind Is Nothing Then
dict1.Add rng.Value, rng.Value
End If
Next rng
'比较并将不同的值存储在字典中
For Each rng In rngC
Set rngFind = rngA.Find(What:=rng.Value)
If rngFind Is Nothing Then
dict2.Add rng.Value, rng.Value
End If
Next rng
'输出列A中有但列C中没有的项
With dict1
Range("B1").Resize(.Count, 1)= Application.Transpose(.Items)
End With
'输出列C中有但列A中没有的项
With dict2
Range("D1").Resize(.Count, 1)= Application.Transpose(.Items)
End With
'释放变量
Set rngFind = Nothing
Set dict1 = Nothing
Set dict2 = Nothing
End Sub
代码运行后的结果如下图5所示。
图5