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