案例如下:
上图中有客户和拜访时间,现在要提取每个客户的首次拜访时间和末次拜访时间。
如果直接用函数做,我们可以先把姓名列用删除重复项获得不重复的姓名,求首次拜访时间用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
看来是万变不离其宗!所以基础一定要理解透才能融汇贯通!
今天的分享就到这里了!
想更深入的学习视频教程,请进入公众号后台菜单中了解详情!
联系客服