VBA比较代码

时间:2016-03-31 14:17:18

标签: excel vba excel-vba

我的VBA代码比较了同一张表中的2列,他比较了列A和B,并将结果放在D和E列中。

我在A"社区R1"与B列中的不同之处不同 "社区R2"在列D i中,数据存在于列A中但不存在于列B中,而在列E中,数据存在于列B中但不存在于列A中。    它只是fin工作,但有一个问题是,当我执行代码时,列A和B desepers的标题。能帮我找一个解决方案吗?

这是代码:

Sub two_cols()

Dim d1 As Object, d2 As Object, d3 As Object, e
Application.ScreenUpdating = False
Range("D2:E30000").Clear



Set d1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
Set d3 = CreateObject("scripting.dictionary")
Cells(1) = Range("A2")
Cells(2) = Range("B2")
For Each e In Cells(1).Resize(Cells(Rows.Count, 1).End(3).Row).Value
    d1(e) = True
    d2(e) = True
Next e

For Each e In Cells(2).Resize(Cells(Rows.Count, 2).End(3).Row).Value
    If (d2(e)) * (d1.exists(e)) Then d1.Remove e
    If Not d2(e) Then d3(e) = True
Next e

On Error Resume Next
Range("D2").Resize(d1.Count) = Application.Transpose(d1.keys)
Range("E2").Resize(d3.Count) = Application.Transpose(d3.keys)
On Error GoTo 0
Application.ScreenUpdating = True
End Sub

这是文件:http://www.cjoint.com/c/FCFoqR7niZv

1 个答案:

答案 0 :(得分:0)

这是以下结果: 单元格(1)=范围(" A2") 单元格(2)=范围(" B2")

这些是将Header单元格设置为A2和B2的值 如果你评论这些,你不会丢失标题行,但你会发现你正在比较你的标题行。我建议使用以下版本的脚本:

Sub two_cols()

Dim d1 As Object, d2 As Object, d3 As Object, e
Application.ScreenUpdating = False
Range("D2:E30000").Clear



Set d1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
Set d3 = CreateObject("scripting.dictionary")
'Cells(1) = Range("A2")
'Cells(2) = Range("B2")
Dim header1 As Boolean
Dim header2 As Boolean
header1 = True
header2 = True

For Each e In Cells(1).Resize(Cells(Rows.Count, 1).End(3).Row).Value
    If header1 = False Then
        d1(e) = True
        d2(e) = True
    Else
        header1 = False
       End If
Next e

For Each e In Cells(2).Resize(Cells(Rows.Count, 2).End(3).Row).Value
    If header2 = False Then
        If (d2(e)) * (d1.exists(e)) Then d1.Remove e
        If Not d2(e) Then d3(e) = True
    Else
        header2 = False
    End If
Next e

On Error Resume Next
Range("D2").Resize(d1.Count) = Application.Transpose(d1.keys)
Range("E2").Resize(d3.Count) = Application.Transpose(d3.keys)
On Error GoTo 0
Application.ScreenUpdating = True
End Sub