VBA宏来比较Excel中的列并在第三列中显示差异

VBA宏来比较Excel中的列并在第三列中显示差异,excel,vba,Excel,Vba,我希望创建一个宏按钮来比较Excel中的a列和B列,任何差异都列在C列中 我希望A中所有不在B中的值都显示在C中 我希望B中不在A中的所有值也显示在C中 我希望能够做到这一点,无论什么数据被放入A或B 创建一个工具栏,工具栏上有一个运行Sub-SelectionCompare的按钮。突出显示包含数据的两列,然后单击按钮。该死 您可以调整此代码以更好地处理空格、行标题、重复项、检测不正确的开始条件(如无选择或选择大小不正确)或检测/防止覆盖输出列中的数据 Function ClipRange(V

我希望创建一个宏按钮来比较Excel中的a列和B列,任何差异都列在C列中

  • 我希望A中所有不在B中的值都显示在C中
  • 我希望B中不在A中的所有值也显示在C中
  • 我希望能够做到这一点,无论什么数据被放入A或B

创建一个工具栏,工具栏上有一个运行Sub-SelectionCompare的按钮。突出显示包含数据的两列,然后单击按钮。该死

您可以调整此代码以更好地处理空格、行标题、重复项、检测不正确的开始条件(如无选择或选择大小不正确)或检测/防止覆盖输出列中的数据

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.我所做的编辑正在等待审查,因此可能需要一段时间才能看到它们。很抱歉试图提供帮助!没问题!您的编辑已被标记为“全部审核”。也许发表任何评论都是错误的——我的道歉。这就成功了。谢谢所有这些代码中到底发生了什么?将列剪切到工作簿中已使用的行。将每列的所有不同值放入字典中。将每个字典相互比较,并将不匹配项放入下一列。