字典的基础我们已经学习完了,这节我们分享下字典的实际应用之一。
案例如下:
上图中有客户和拜访时间,现在要提取每个客户的首次拜访时间和末次拜访时间。
如果直接用函数做,我们可以先把姓名列用删除重复项获得不重复的姓名,求首次拜访时间用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
看来是万变不离其宗!所以基础一定要理解透才能融会贯通!
转自:米宏Office