龙空技术网

VBA代码集锦-利用字典做两列数据的对比并对齐

excel技能宝典 284

前言:

今天大家对“vba数据比对怎么写”都比较重视,小伙伴们都想要分析一些“vba数据比对怎么写”的相关文章。那么小编在网摘上收集了一些有关“vba数据比对怎么写””的相关知识,希望看官们能喜欢,各位老铁们一起来了解一下吧!

源数据:

代码:

Sub 对比()

Dim arr, brr, crr

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

'建立字典对象

Set d = CreateObject("scripting.dictionary")

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

lastrowA = Sheets("对比对齐两列数据").Cells(Rows.Count, 1).End(xlUp).Row

lastrowB = Sheets("对比对齐两列数据").Cells(Rows.Count, 2).End(xlUp).Row

'将数据区域导入数组

arr = Sheets("对比对齐两列数据").Range("A3:A" & lastrowA)

brr = Sheets("对比对齐两列数据").Range("B3:B" & lastrowB)

'重新定义数组crr,数组行数:数组arr+数组brr元素数和,列数:2

ReDim crr(1 To UBound(arr) + UBound(brr), 1 To 2)

'循环数组arr,将arr的值赋值给crr的第一列,同时,建立字典,字典的关键字为数组的值,对应的项目给该值对应的位置

'举例来说,字典的第一个关键字为淮安,淮安对应的项为1

For i = 1 To UBound(arr)

crr(i, 1) = arr(i, 1)

d(arr(i, 1)) = i

Next

n = UBound(arr)

'循环数组brr,首先判断brr的元素在字典中是否存在,如果存在,那么通过d(brr(j, 1))找到这个元素在字典中所在的位置,然后把这个元素赋值给crr该元素所在位置的第二列

'举例来说,brr的第一个值是青岛,在arr中是第17个,通过上面的循环和写入字典,可以判断,青岛已经是字典的关键字,并且对应的值是17,同时,数组crr的第17行,第1列的值就是青岛

'此时brr也出现了青岛,通过判断,字典中存在,那么d(brr(j, 1))=d(青岛)=17,即crr(17,2)=brr(j,1)=青岛,把青岛写入到crr的第17行,第2列

For j = 1 To UBound(brr)

If d.exists(brr(j, 1)) Then

crr(d(brr(j, 1)), 2) = brr(j, 1)

Else

'如果不存在,那么就写入到crr的n行2列,n的初始值是arr元素的数量,n+1,即第一个不在arr中的brr值写到crr的n+1行,之后每次出现都加一行,依次往下赋值

n = n + 1

crr(n, 2) = brr(j, 1)

End If

Next

'将crr的数据赋值到单元格区域

Sheets("对比对齐两列数据").Range("D3").Resize(n, 2).Value = crr

End Sub

标签: #vba数据比对怎么写