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

VBA 字典 关联定位

Excel VBA练习 2021-07-15
1611

hello ,小伙伴们,大家好

在前两篇小编写了VBA 字典 数据行列转置一维表转二维表,二维表转一维表的...

在当中有提到过字典的关联定位功能


今天来举个荔枝..

如下图所示 ↓



这是一份业务员在各个地区销售产品的数据源

现需要转换成F列的格式


上代码,代码如下


    Sub Dic_关联()
    Dim Dic As Object
    Dim aData, aRes
    Dim intX&, x&, y&, iRow&, iCol&
    Dim strID$
    aData = Range("B2").CurrentRegion '数据来源
    ReDim aRes(1 To UBound(aData), 1 To UBound(aData, 2)) '定义结果数组大小
    Set Dic = CreateObject("Scripting.Dictionary") '后期绑定字典
    iRow = 1 '数组行位置初始化
    For intX = 2 To UBound(aData) '遍历循环数据源
    strID = aData(intX, 1) & "," & aData(intX, 2) '连接字符串做为关键字 既 地区&","&产品
    If Not Dic.exists(strID) Then '判断关键字是否存在字典中
    iRow = iRow + 1 '结果数组行位置累加
    Dic(strID) = iRow '连接字符串作为关键字Key 数组行位置作为条目Item 写入字典
    Dic(iRow) = 3 '数组行位置作为关键字,条目为3,存入结果数组初始列为第3个位置
    aRes(iRow, 1) = aData(intX, 1) '符合条件的元素写入结果数组
    aRes(iRow, 2) = aData(intX, 2)
    aRes(iRow, 3) = aData(intX, 3)
    Dic(strID & "," & aData(intX, 3)) = "" '为避免出现重复,再次连接字符串 既地区&","&产品&","&业务员
    Else
    If Not Dic.exists(strID & "," & aData(intX, 3)) Then '判断地区&","&产品&","&业务员是否存在字典中
    x = Dic(strID) '取出结果数组行位置 地区&","&产品
    y = Dic(x) + 1 '取出结果数组列位置 并且+1
    If y > UBound(aRes, 2) Then ReDim Preserve aRes(1 To UBound(aRes), 1 To y)
    '判断列位置是否大于结果数据列维度,符合条件使用ReDim Preserve调整结果数组的大小
    aRes(x, y) = aData(intX, 3) '写入业务员
    Dic(x) = y '重新写入字典
    Dic(strID & "," & aData(intX, 3)) = ""
    End If
    End If
    Next
    aRes(1, 1) = "地区": aRes(1, 2) = "产品"
    For y = 3 To UBound(aRes, 2) '循环结果数组第一行
    aRes(1, y) = "业务员" & y - 2 '写入标题
    Next
    Range("F2").Resize(iRow, UBound(aRes, 2)) = aRes '输出内容
    Set Dic = Nothing '释放
    End Sub


    运行效果



    代码主要看第10至31行


    第11行使用了字典的特点,关键字的唯一性,将多条件查询的字符串合并成一个字符串,转换成单条件查询

    第12行判断字典中是否存在关键字

    第13行结果数组行位置累加

    第14行 将连接的字符串做为关键字Key条目为数组行位置Item 写入字典

    第15行数组行位置作为Key初始Item为3写入字典

    第19行为避免出现重复连接地区产品业务员作为关键字写入字典

    第22至23行分别取结果数组的行列位置也就是我们常说的关联定位

    ...


    在上述代码中,还是如前两篇文章所说的,利用了字典的特性,以关键字我Key,位置为Item,使多个数据之间存在位置的关联...


    示例文件下载

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

    提取码:abcd


    收工!

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

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

    关注公众号 ↓


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

    评论