学习了字典后,我们知道从字典中读取数据速度超级快,所以我们今天就学习下如何利用字典实现查询功能。 如下图: 一个表里存放着商品的信息,在采购单中输入商品编号时,希望品名,规格,单价能够自动匹配上去。 思路: 把商品信息写入字典,一个商品对应的有品名、规格、单价三个数据,一个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 思路有不一定能做出来,只有在实际操作中不断的举一反三,不断的去遇到问题,解决问题,才能有所提高! |
|