暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

VBA 字典 两表核对数据

Excel VBA练习 2021-07-15
1424

hello,小伙伴们,大家好

今天,小编给大家带来了一篇关于字典两表查差异的文章


在工作中,很多时候都需要对比这个数据在其他数据中有没有,是否有差异之类的


核对数据有很多种方法,条件格式,函数,Power Query的合并查询等等...


今天小编用字典来解这个题


如下图所示



代码如下


    Sub GetData(control As IRibbonControl)
    Dim Dic As Object
    Dim aData, arr, aRes, N, Mat
    Dim intX&, MaxN&
    aData = Range("A1").CurrentRegion
    arr = Range("C1").CurrentRegion
    MaxN = 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为数据1
    aRes(intX, 1) = aData(intX, 1)
    Next
    For 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)) = "相同" '修改关键字对应的条目
    Else
    N(1) = N(1) + 1
    aRes(N(1), 4) = arr(intX, 1)
    Dic(arr(intX, 1)) = "数据2" '名字作为关键字写入字典,对应的Item为数据2
    End If
    aRes(intX, 2) = arr(intX, 1)
    Next
    For Each Mat In Dic.keys '遍历字典中的Key
    If Dic(Mat) = "数据1" Then '判断关键字对应的条目是否数据1
    N(2) = N(2) + 1
    aRes(N(2), 5) = Mat
    End If
    Next
    aRes(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)) = aRes
    Set Dic = Nothing
    End Sub


    代码解析:

        

    第7行判断那个数组的行下标大,定义结果数组选择最大的行下标

    第9行新建一个一维数组,每个元素均为1,作为后面循环的计数器

    第11至14行循环数据1写入字典,并且写入结果数组的第一列

    第15至26行遍历数据2,判断字典中是否包含数据2中的名字

    第27行至32行遍历字典中的Key,判断每个关键字对应的条目是否数据1

    第33行写入标题


    或许有小伙伴会问,这个只是单个条件,如果是多个条件应该怎么写

    在字典中单条件和多条件是一样的,将多条件查询的字符串合并成一个字符串转换成单条件查询...

    VBA 字典 关联定位


    示例文件下载


    链接:https://pan.baidu.com/s/1H61i2FCfM2J8h271l92POQ

    提取码:abcd


    收工!

    如果小伙伴有好的思路,可以在小编的公众号留言发给小编研究下

    文章觉得有用,点个赞+在看,你的每一次点赞和转发就是小编原创的动力

    关注公众号 ↓


    文章转载自Excel VBA练习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论