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