VBA宏来比较Excel中的列并在第三列中显示差异
我希望创建一个宏按钮来比较Excel中的a列和B列,任何差异都列在C列中VBA宏来比较Excel中的列并在第三列中显示差异,excel,vba,Excel,Vba,我希望创建一个宏按钮来比较Excel中的a列和B列,任何差异都列在C列中 我希望A中所有不在B中的值都显示在C中 我希望B中不在A中的所有值也显示在C中 我希望能够做到这一点,无论什么数据被放入A或B 创建一个工具栏,工具栏上有一个运行Sub-SelectionCompare的按钮。突出显示包含数据的两列,然后单击按钮。该死 您可以调整此代码以更好地处理空格、行标题、重复项、检测不正确的开始条件(如无选择或选择大小不正确)或检测/防止覆盖输出列中的数据 Function ClipRange(V
- 我希望A中所有不在B中的值都显示在C中
- 我希望B中不在A中的所有值也显示在C中
- 我希望能够做到这一点,无论什么数据被放入A或B
Function ClipRange(Value As Excel.Range) As Excel.Range
Set ClipRange = Application.Intersect(Value, Value.Parent.UsedRange)
End Function
Function RangeToDict(Value As Excel.Range) As Object
Dim Cell As Excel.Range
Set RangeToDict = CreateObject("Scripting.Dictionary")
For Each Cell In Value
If Not RangeToDict.Exists(Cell.Value) Then
RangeToDict.Add Cell.Value, 1
End If
Next
End Function
Sub ColumnCompare(Column1 As Excel.Range, Column2 As Excel.Range, OutputColumn As Excel.Range)
Dim Dict1 As Object
Dim Dict2 As Object
Dim Cell As Excel.Range
Dim Key As Variant
Set Dict1 = RangeToDict(ClipRange(Column1))
Set Dict2 = RangeToDict(ClipRange(Column2))
Set Cell = OutputColumn.Cells(1, 1)
For Each Key In Dict1
If Not Dict2.Exists(Key) Then
Cell.Value = Key
Set Cell = Cell.Offset(1, 0)
End If
Next
For Each Key In Dict2
If Not Dict1.Exists(Key) Then
Cell.Value = Key
Set Cell = Cell.Offset(1, 0)
End If
Next
End Sub
Sub SelectionCompare()
ColumnCompare Selection.Columns(1), Selection.Columns(2), Selection.Columns(2).Offset(0, 1)
End Sub
请举个例子。你的意思是A可以是空的还是B?否则,如果A=7和B=8,你想要C中的什么?B.t.w.你需要VBA吗?因为这是一个公式,不需要VBA。我希望用户能够粘贴两列数据进行比较,然后点击按钮比较两列。例如,如果A1=1、A2=3、B1=2和B2=3,我希望C显示不在两列中的值,即本例中的1和2。请检查我对您的问题所做的更改并确认。B.t.w.我所做的编辑正在等待审查,因此可能需要一段时间才能看到它们。很抱歉试图提供帮助!没问题!您的编辑已被标记为“全部审核”。也许发表任何评论都是错误的——我的道歉。这就成功了。谢谢所有这些代码中到底发生了什么?将列剪切到工作簿中已使用的行。将每列的所有不同值放入字典中。将每个字典相互比较,并将不匹配项放入下一列。