hello,小伙伴们,大家好
今天,小编给大家带来了一篇关于字典两表查差异的文章
在工作中,很多时候都需要对比这个数据在其他数据中有没有,是否有差异之类的
核对数据有很多种方法,条件格式,函数,Power Query的合并查询等等...
今天小编用字典来解这个题
如下图所示

代码如下
Sub GetData(control As IRibbonControl)Dim Dic As ObjectDim aData, arr, aRes, N, MatDim intX&, MaxN&aData = Range("A1").CurrentRegionarr = Range("C1").CurrentRegionMaxN = IIf(UBound(aData) > UBound(arr), UBound(aData), UBound(arr))ReDim aRes(1 To MaxN, 1 To 5)N = Array(1, 1, 1)Set Dic = CreateObject("Scripting.Dictionary")For intX = 2 To UBound(aData) '循环遍历数据1的数据源Dic(aData(intX, 1)) = "数据1" '名字作为关键字写入字典,对应的Item为数据1aRes(intX, 1) = aData(intX, 1)NextFor intX = 2 To UBound(arr)If Dic.exists(arr(intX, 1)) Then '判断字典中是否包含关键字N(0) = N(0) + 1 '计数器累加aRes(N(0), 3) = arr(intX, 1) '写入结果数组Dic(arr(intX, 1)) = "相同" '修改关键字对应的条目ElseN(1) = N(1) + 1aRes(N(1), 4) = arr(intX, 1)Dic(arr(intX, 1)) = "数据2" '名字作为关键字写入字典,对应的Item为数据2End IfaRes(intX, 2) = arr(intX, 1)NextFor Each Mat In Dic.keys '遍历字典中的KeyIf Dic(Mat) = "数据1" Then '判断关键字对应的条目是否数据1N(2) = N(2) + 1aRes(N(2), 5) = MatEnd IfNextaRes(1, 1) = "数据1": aRes(1, 2) = "数据2": aRes(1, 3) = "两表相同": aRes(1, 4) = "数据2独有": aRes(1, 5) = "数据1独有"Range("E1").Resize(UBound(aRes), UBound(aRes, 2)) = aResSet Dic = NothingEnd Sub
代码解析:
第7行判断那个数组的行下标大,定义结果数组选择最大的行下标
第9行新建一个一维数组,每个元素均为1,作为后面循环的计数器
第11至14行循环数据1写入字典,并且写入结果数组的第一列
第15至26行遍历数据2,判断字典中是否包含数据2中的名字
第27行至32行遍历字典中的Key,判断每个关键字对应的条目是否数据1
第33行写入标题
或许有小伙伴会问,这个只是单个条件,如果是多个条件应该怎么写
在字典中单条件和多条件是一样的,将多条件查询的字符串合并成一个字符串转换成单条件查询...
示例文件下载
链接:https://pan.baidu.com/s/1H61i2FCfM2J8h271l92POQ
提取码:abcd
收工!
如果小伙伴有好的思路,可以在小编的公众号留言发给小编研究下
文章觉得有用,点个赞+在看,你的每一次点赞和转发就是小编原创的动力
关注公众号 ↓
文章转载自Excel VBA练习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




