Excel如何提取客户第一次与最后一次出现的记录?字典1秒搞定

2023-06-30 浏览次数 11

问题

数据运营的小伙伴经常会遇到一个问题,那就是如何获取某一客户最初以及最后一次购物时间、购物金额等信息,好进一步判断用户的活跃程度。

需求

上表为销售记录明细表,有客户姓名,订单日期及其消费金额,那么如果在表中找出每个客户头次消费记录以及最后一次消费记录呢?

字典1秒提取第一次/最后一次记录

解决方法

不管是第一次还是最后一次,全都是时间概念上的问题,可以根据日期列,去判断某一客户的第一次与最后一次购买记录;

第一步:

先对日期列升序,时间按照从前往后向下排列,某一客户第一次出现的记录即为第一次购买记录,最后一次出现的记录即为最后一次购买记录;

第二步:

利用字典的特性,key值的唯一性,存在于字典中的key,二次添加会报错,无法加入,所以当每个客户第一次加入之后,后面再次出现的同名客户添加不进去,利用这一特性,可获取每个客服第一次购买记录;

建立两个字典,d与d1,key都为客户姓名,由于key的不重复性,再次写入相同客户姓名的时候,程序会报错,所以需要一句“On Error Resume Next”,遇见错误继续向下运行;

当把所有第一次出现的客户姓名写入完成之后,在利用转置技术Application.Transpose将内容输入到Excel单元格中。

明细代码如下所示:

Sub 提取第一次()


Dim arr(),arr1()

On Error Resume Next '遇错继续运行

a = Cells(Rows.Count, 1).End(xlUp).Row '行数

Set d = CreateObject("scripting.dictionary") '创建字典d

Set d1 = CreateObject("scripting.dictionary") '创建字典d1

arr = Range("b1:c" & a) '数据存入数组

arr1 = Range("a1:b" & a) '数据存入数组

For i = 1 To UBound(arr) '循环写入字典

d.Add arr(i, 1), arr(i, 2) '写入

d1.Add arr1(i, 2), arr1(i, 1) '写入

Next '循环

[e1].Resize(d1.Count) = Application.Transpose(d1.items)

[f1].Resize(d.Count) = Application.Transpose(d.keys)

[g1].Resize(d.Count) = Application.Transpose(d.items)


End Sub '结束

第三步:

利用修改字典值的方式获取客户的最后购买记录:

可以发现获取第一次与最后一次记录的两段代码两者不同之处仅在于:

【d.Add arr(i, 1), arr(i, 2) 】与【d(arr(i, 1)) = arr(i, 2)】,前者是增加,后者是赋值,增加时,存在则报错,赋值则将key的值更新

明细代码如下:

Sub 提取最后一次()

Dim arr()

a = Cells(Rows.Count, 1).End(xlUp).Row

Set d = CreateObject("scripting.dictionary")

Set d1 = CreateObject("scripting.dictionary")

arr = Range("b1:c" & a)

arr1 = Range("a1:b" & a)

For i = 1 To UBound(arr)

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

d1(arr1(i, 2)) = arr1(i, 1)

Next

[i1].Resize(d1.Count) = Application.Transpose(d1.items)

[j1].Resize(d.Count) = Application.Transpose(d.keys)

[k1].Resize(d.Count) = Application.Transpose(d.items)

End Sub

小结

提取第一次记录与最后一次记录的前提都是需要先将日期按升序排序,不然无法获取正确的结果。

利用字典key值的特性,完美提取数据记录,你学会了吗?