点击蓝字关注我们~请多多指教~
数据运营的小伙伴经常会遇到一个问题,那就是如何获取某一客户最初以及最后一次购物时间、购物金额等信息,好进一步判断用户的活跃程度。
上表为销售记录明细表,有客户姓名,订单日期及其消费金额,那么如果在表中找出每个客户头次消费记录以及最后一次消费记录呢?
不管是第一次还是最后一次,全都是时间概念上的问题,可以根据日期列,去判断某一客户的第一次与最后一次购买记录;
第一步:
先对日期列升序,时间按照从前往后向下排列,某一客户第一次出现的记录即为第一次购买记录,最后一次出现的记录即为最后一次购买记录;
第二步:
利用字典的特性,key值的唯一性,存在于字典中的key,二次添加会报错,无法加入,所以当每个客户第一次加入之后,后面再次出现的同名客户添加不进去,利用这一特性,可获取每个客服第一次购买记录;
建立两个字典,d与d1,key都为客户姓名,由于key的不重复性,再次写入相同客户姓名的时候,程序会报错,所以需要一句“On Error Resume Next”,遇见错误继续向下运行;
当把所有第一次出现的客户姓名写入完成之后,在利用转置技术Application.Transpose将内容输入到Excel单元格中。
明细代码如下所示:
Sub 提取第一次()Dim arr(),arr1()On Error Resume Nexta =Cells(Rows.Count, 1).End(xlUp).RowSet d = CreateObject("scripting.dictionary") '创建字典dSet d1 = CreateObject("scripting.dictionary") '创建字典d1arr = 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).RowSet 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
提取第一次记录与最后一次记录的前提都是需要先将日期按升序排序,不然无法获取正确的结果。