vba代码比较两列数据(VBA利用字典筛选出两列重复与差异数据)

源数据与结果示例:

vba代码比较两列数据(VBA利用字典筛选出两列重复与差异数据)(1)

代码解析:

Sub match11()

Dim arr, brr, drr(), err(), frr(), grr()

Dim i, j, x, lastrowA, lastrowB As Integer

'建立字典对象

Set Da = CreateObject("scripting.dictionary")

Set Db = CreateObject("scripting.dictionary")

'获取数据区域最后一行的行数

lastrowA = Sheets("筛选两列重复与差异").Cells(Rows.Count, 1).End(xlUp).Row

lastrowB = Sheets("筛选两列重复与差异").Cells(Rows.Count, 2).End(xlUp).Row

'将数据区域导入数组

arr = Sheets("筛选两列重复与差异").Range("A2:A" & lastrowA)

brr = Sheets("筛选两列重复与差异").Range("B2:B" & lastrowB)

'遍历数组,写入字典

For i = 1 To UBound(arr)

Da(arr(i, 1)) = ""

Next

For j = 1 To UBound(brr)

Db(brr(j, 1)) = ""

Next

'字典对比,把两列相同的写入D列,以A列为序

'对字典A的关键字进行循环,判断字典B的关键字是否存在,如果存在,就写入数组drr,不存在,就写入字典frr

x = 0

y = 0

For Each k In Da.keys

If Db.exists(k) Then

x = x 1

ReDim Preserve drr(1 To x)

drr(x) = "" & k

Else

y = y 1

ReDim Preserve frr(1 To y)

frr(y) = k

End If

Next

'对字典B的关键字进行循环,判断字典A的关键字是否存在,如果存在,就写入数组err,不存在,就写入字典grr

m = 0

n = 0

For Each k In Db.keys

If Da.exists(k) Then

m = m 1

ReDim Preserve err(1 To m)

err(m) = k

Else

n = n 1

ReDim Preserve grr(1 To n)

grr(n) = k

End If

Next

'将四个数组写入到单元格区域

Range("D2").Resize(x, 1) = Application.Transpose(drr)

Range("E2").Resize(m, 1) = Application.Transpose(err)

Range("F2").Resize(y, 1) = Application.Transpose(frr)

Range("G2").Resize(n, 1) = Application.Transpose(grr)

End Sub

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页