我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
在讲工作表Change事件时曾经分享过一节:
《开单数量超出库存时,你的系统会自动预警吗?》
学习了字典后,我们知道从字典中读取数据速度超级快,所以我们今天就学习下如何利用字典实现查询功能。
如下图:
在采购单中输入商品编号时,希望从商品信息表中取出对应的品名,规格,单价自动匹配上去。
思路:
把商品信息写入字典,一个商品对应的有品名、规格、单价三个数据,一个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))NextIf Target.Column = 1 And Target.Row > 2 And Target.Row < 10 ThenTarget(1, 2).Resize(1, 3) = d(Target.Value)End IfEnd Sub
向右滑动可以查看完整代码
d(arr(i, 1)) = Array(arr(i, 2), arr(i, 3), arr(i, 4))
红色部分是把商品信息写入字典,我们可以看到Item部分利用数组的写法,可以把商品信息中的品名、规格、单价三个元素合并起来以数组的形式写进Item中去,这样上面的难点就迎刃而解了。
本案例结合了工作表Change事件和字典、数组的用法,写到这里突然想起来昨天的案例:
同样的道理,也可以用条数数组的方法:
代码如下:
Sub 加班时间统计()Dim d As Object, arr, i%, n%, arr1, m, o, A, BSet 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 IfNext[g2].Resize(d.Count, 1) = Application.Transpose(d.KEYS)[h2].Resize(d.Count, 3) = Application.Transpose(Application.Transpose(d.items))End Sub
向右滑动可以查看完整代码
有思路不一定就能做出来,只有在实际操作中不断的举一反三,不断的遇到问题,解决问题,才能有所提高!
本节的分享就到这里,鹏哥祝大家每天都有进步。
聚米为谷
博学宏才
更多学习内容
手机端请扫描
电脑端请登录
www.mihong.top
米宏陪你做一个好学的人
您点的每个赞,我都认真当成了喜欢