vba 对比A C两列数据,将A列比C列多的数据放到E列,C列比A列多的数据放到F列,AC两列相同的数据放到G列
时间: 2024-03-21 20:42:06 浏览: 49
VBA多列数据区间条件数据对比.xlsm
您可以使用VBA编写程序来对比A和C两列数据,并将它们分别放到E、F和G列。下面是一个示例:
1. 首先,您需要打开VBA编辑器。在Excel中,可以按Alt+F11打开。
2. 在VBA编辑器中,选择Insert->Module,然后在新模块中输入以下代码:
```
Sub CompareColumns()
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Dim dictA As Object, dictC As Object
Dim key As Variant
Set ws = ActiveSheet
lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row
Set dictA = CreateObject("Scripting.Dictionary")
Set dictC = CreateObject("Scripting.Dictionary")
'将A列和C列的值分别存储到字典对象中
For i = 1 To lastRow
dictA(ws.Cells(i, "A").Value) = 1
dictC(ws.Cells(i, "C").Value) = 1
Next i
'将A列比C列多的值存储到E列
For Each key In dictA.Keys
If Not dictC.Exists(key) Then
ws.Cells(ws.Cells(Rows.Count, "E").End(xlUp).Row + 1, "E").Value = key
End If
Next key
'将C列比A列多的值存储到F列
For Each key In dictC.Keys
If Not dictA.Exists(key) Then
ws.Cells(ws.Cells(Rows.Count, "F").End(xlUp).Row + 1, "F").Value = key
End If
Next key
'将AC两列相同的值存储到G列
For i = 1 To lastRow
If dictA.Exists(ws.Cells(i, "A").Value) And dictC.Exists(ws.Cells(i, "C").Value) Then
ws.Cells(ws.Cells(Rows.Count, "G").End(xlUp).Row + 1, "G").Value = ws.Cells(i, "A").Value
End If
Next i
End Sub
```
3. 在代码中,我们首先声明了一个工作表对象(ws),并使用lastRow变量找到A列的最后一行。然后,我们使用CreateObject函数创建了两个字典对象(dictA和dictC),并使用For循环将A列和C列的值分别存储到这些字典对象中。
4. 接下来,我们使用For Each循环遍历dictA和dictC中的键,并使用If语句判断每个键是否存在于另一个字典对象中。如果一个键只存在于dictA中,就将它存储到E列;如果一个键只存在于dictC中,就将它存储到F列;如果一个键同时存在于dictA和dictC中,就将它存储到G列。
5. 最后,您可以在VBA编辑器中按F5来运行代码,或者将代码与一个按钮关联,以便在Excel中轻松运行它。
请注意,这只是一个简单的示例,如果您的数据量很大,可能需要进行优化。
阅读全文