分享

字典实例应用一(求首次和末次)

 L罗乐 2018-03-30


案例如下:



上图中有客户和拜访时间,现在要提取每个客户的首次拜访时间和末次拜访时间。


如果直接用函数做,我们可以先把姓名列用删除重复项获得不重复的姓名,求首次拜访时间用Vlookup,求末次拜访时间用Lookup。


我们学习了字典后可以用字典技术实现这个目的,理解起来也很简单。


一、求首次:


把A、B两列的姓名和拜访时间先写入数组arr,然后把数组中的每个元素写入字典,因为字典不允许有重复的key,所以当遇到重复的姓名时,直接跳过,继续写入下一条,这样得到的字典中的项目对就是我们想要的结果。这里其实用到的就是前面章节讲的字典写入技巧中第一种方法,不明白的可以返回去好好学习下。


具体代码如下:

Sub 求首次()

Dim d As Object, arr, i%

On Error Resume Next

Set d = CreateObject('scripting.dictionary')

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

For i = 1 To UBound(arr)

d.Add arr(i, 1), arr(i, 2)

Next

[d2].Resize(d.Count, 1) = Application.Transpose(d.keys)

[e2].Resize(d.Count, 1) = Application.Transpose(d.items)

End Sub


2、求末次:


这里用到的是字典写入技巧中第二种办法,修改key对应的item值,如果字典中存在该key,那就直接修改,这样就可以得到某姓名最后一次出现时对应的时间,没有该key的就直接加进去。


代码如下:

Sub 求末次()

Dim d As Object, arr, i%

Set d = CreateObject('scripting.dictionary')

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

For i = 1 To UBound(arr)

d(arr(i, 1)) = arr(i, 2)

Next

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

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

End Sub


看来是万变不离其宗!所以基础一定要理解透才能融汇贯通!


今天的分享就到这里了!


想更深入的学习视频教程,请进入公众号后台菜单中了解详情!


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多