分享

字典应用实例六(条目数组的用法)

 L罗乐 2018-04-10


学习了字典后,我们知道从字典中读取数据速度超级快,所以我们今天就学习下如何利用字典实现查询功能


如下图:



一个表里存放着商品的信息,在采购单中输入商品编号时,希望品名,规格,单价能够自动匹配上去。


思路:

把商品信息写入字典,一个商品对应的有品名、规格、单价三个数据,一个item怎么装三个数据呢?这就是难点所在,如果能把品名、规格、单价三个数据写入一个item中,在采购单中输入商品编号时,在字典中查找key(商品编号)对应的item放入三个对应的单元格中即可。我们先看下代码:


Private Sub Worksheet_Change(ByVal Target As Range)

Dim arr, d As Object, i%

Set d = CreateObject('scripting.dictionary')

arr = Sheets('商品信息').Range('a2', Sheets('商品信息').[d1].End(xlDown))

For i = 1 To UBound(arr)

    d(arr(i, 1)) = Array(arr(i, 2), arr(i, 3), arr(i, 4))

Next

If Target.Column = 1 And Target.Row > 2 And Target.Row < 10 Then

Target(1, 2).Resize(1, 3) = d(Target.Value)

End If


红色部分是把商品信息写入字典,我们可以看到利用数组的写法,可以把数组arr中的几个元素合并起来写进item中去,这样上面的难点就迎刃而解了。


本案例结合了change事件和字典、数组的用法,写到这里突然想去来昨天的案例:



同样的道理,也可以用条数数组的方法:

Sub 加班时间统计()

Dim d As Object, arr, i%, n%, arr1, m, o, A, B

Set d = CreateObject('scripting.dictionary')

arr = Range('b2', [e2].End(xlDown))

For i = 1 To UBound(arr)

        If Not d.exists(arr(i, 1)) Then

        n = n 1

        d(arr(n, 1)) = Array(arr(n, 2), arr(n, 3), arr(n, 4))

    Else

        arr1 = d(arr(i, 1))

        d(arr(i, 1)) = Array(arr1(0) arr(i, 2), arr1(1) arr(i, 3), arr1(2) arr(i, 4))

        End If

Next

[g2].Resize(d.Count, 1) = Application.Transpose(d.KEYS)

[h2].Resize(d.Count, 3) = Application.Transpose(Application.Transpose(d.items))

End Sub


思路有不一定能做出来,只有在实际操作中不断的举一反三,不断的去遇到问题,解决问题,才能有所提高!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多