博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何提取明细表头_Excel如何提取客户第一次与最后一次出现的记录?字典1秒搞定...
阅读量:5322 次
发布时间:2019-06-14

本文共 1792 字,大约阅读时间需要 5 分钟。

问题

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

708645fe85741871112adb7b983ae7a7.png

需求

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

cd5594fa6356d8865212b838bf2edea7.gif

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

解决方法

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

第一步:

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

8a0a0e88b3b93b85068de3a0bade32d0.gif

第二步:

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

48b0c8e9e9e71541ebebc6e2fe32e78d.gif

建立两个字典,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 '结束

第三步:

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

6bfd315fd432d525ae154cd309911a04.gif

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

【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值的特性,完美提取数据记录,你学会了吗?

0aebbf3c4b6905681e17fcc6623831f2.png

转载地址:http://jihhv.baihongyu.com/

你可能感兴趣的文章
poj 3253(贪心)
查看>>
Invalid prop: type check failed for prop "maxlength". Expected Number, got String.
查看>>
ipfs私链服务
查看>>
C语言 · Sine之舞
查看>>
C语言 · 简单加法
查看>>
好用的在线Markdown编辑器
查看>>
camera 摄像机
查看>>
wtforms
查看>>
加载静态文件,父模板的继承和扩展
查看>>
struts2 日期类型问题
查看>>
javascript数据缓存策略之本地存储
查看>>
HTML5 API详解(1):fullscreen全屏模式
查看>>
AngularJs自定义指令详解(5) - link
查看>>
从“埋点技术已死?”开始说起
查看>>
[配置Cordova环境] [Alfred使用手册]
查看>>
EFCode First 导航属性
查看>>
嵌入式Linux开发
查看>>
Swift语法初见
查看>>
XML学习笔记(二)-- DTD格式规范
查看>>
前端基础之html
查看>>