我想找創建宏按鈕來比較在Excel列A和列B,與任何差異塔中列出的差C.VBA宏比較在Excel列,並顯示在第三塔
- 我想在一個不在B中的所有值以顯示用C
- 我想在乙不在A的所有值中C.也顯示
- 我希望能夠做到這一點,無論將什麼數據放入A或B中。
我想找創建宏按鈕來比較在Excel列A和列B,與任何差異塔中列出的差C.VBA宏比較在Excel列,並顯示在第三塔
使用運行Sub SelectionCompare的按鈕創建工具欄。突出顯示包含數據的2列,然後單擊按鈕。布拉姆!
您可以調整此代碼以更好地處理空白,行標題,重複項,檢測不適當的啓動條件(如未選擇或尺寸不正確的選擇)或檢測/防止覆蓋輸出列中的數據。
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
對不起,想要獲得幫助! – 2012-02-05 10:56:22
完全沒問題!你的編輯被標記爲審查是全部。也許這是一個錯誤發表任何評論 - 我的歉意。 – ErikE 2012-02-05 19:43:35
這個技巧。謝謝!所有代碼究竟發生了什麼? – user1190268 2012-02-06 03:41:07
請舉例說明。你的意思是說A可以是空的還是B?否則,如果A = 7和B = 8,你想在C中做什麼? B.t.w.你需要VBA嗎?因爲這對我來說似乎是一個公式,不需要VBA。 – 2012-02-05 07:19:58
我希望用戶能夠粘貼2列數據進行比較,然後點擊按鈕來比較兩列。例如,如果A1 = 1,A2 = 3,B1 = 2和B2 = 3,我希望C顯示不在兩列中的值,在本例中爲1和2。 – user1190268 2012-02-05 08:01:34
請檢查我對您的問題所做的更改並確認。 B.t.w.我所做的編輯正在等待審查,因此可能需要一段時間才能看到。 – 2012-02-05 08:26:47