ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2082|回复: 17

[求助] 怎样通过发票数据找出“流失客户”?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-12-18 16:29 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位老师好!

怎样通过发票数据发现并找出“流失客户”?

流失客户:客户在3个以上(含3)不同月份都有开票,并且客户【倒数第二次开票月份】距离本月(本月指开票日期最后一行的月份)超过12月的客户。

谢谢!


1671352065782.jpg

流失客户.zip

16.81 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2022-12-18 22:05 | 显示全部楼层
建议你模拟的时候更严谨一些,因为结果只有两个。
A11111
C11111

TA的精华主题

TA的得分主题

发表于 2022-12-18 22:22 | 显示全部楼层
代码在审核
GIF 2022-12-18 22-22-00.gif

流失客户.rar

24.3 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2022-12-18 22:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub limonet()
    Dim Cn As Object, StrSQL$, Rs As Object, Arr As Variant, Brr As Variant, i%, S$
    Columns("A:e").ClearContents
    Set Cn = CreateObject("adodb.connection")
    Cn.Open "provider=microsoft.ace.oledb.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.FullName
    StrSQL = "select month(开票日期) as 月,购货方名称,购货方社会统一信用代码 from [发票数据$A:N] group by month(开票日期),购货方名称,购货方社会统一信用代码"
    StrSQL = "select 购货方社会统一信用代码 from (" & StrSQL & ") group by 购货方社会统一信用代码 having count(*)>=3"
    Arr = Cn.Execute(StrSQL).getrows
    For i = 0 To UBound(Arr, 2)
        StrSQL = "select top 2 开票日期 from [发票数据$A:N] where 购货方社会统一信用代码='" & Arr(0, i) & "' order by 开票日期 desc"
        Brr = Cn.Execute(StrSQL).getrows
        If DateDiff("M", Brr(0, 1), Date) > 12 Then S = S & "'" & Arr(0, i) & "',"
    Next i
    StrSQL = "select '流失客户' as 分类,购货方名称,购货方社会统一信用代码 from [发票数据$A:N] where 购货方社会统一信用代码 in(" & Left(S, Len(S) - 1) & ") group by 购货方名称,购货方社会统一信用代码"
    Set Rs = Cn.Execute(StrSQL)
    For i = 0 To Rs.Fields.Count - 1
        Sheet3.Cells(1, i + 1) = Rs.Fields(i).Name
    Next i
    Sheet3.Range("A2").CopyFromRecordset Rs
    Rs.Close
    Cn.Close
    Set Rs = Nothing
    Set Cn = Nothing
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-19 00:15 | 显示全部楼层
流失客户1219.zip

流失客户1219.zip

25.58 KB, 下载次数: 16

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-19 10:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 tte3 于 2022-12-19 10:21 编辑

    Arr = Cn.Execute(StrSQL).getrows
运行时错误“-2147217904(80040e10)"
至少一个参数没有被指定值


AA公司,我还特别文字说明了,多次在同一个月开票的,算一个月,
AA公司最后开票月份为2021.11月和2022.6月,要以倒数第二次开票月算距离现在的时长
所以,应以2021.11月算,距离现在2022.12月时长超过12个月了,计入流失客户

实际运用也是如此,一个顾客,好几年没来了,突然在半年前来一次,又没来了,这是不是算流失客户?
所以,加入倒数第二个开票月份来算,可以排除这种情况。

谢谢帮助!
1671416038399.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-19 10:28 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-12-19 13:14 | 显示全部楼层
tte3 发表于 2022-12-19 10:14
Arr = Cn.Execute(StrSQL).getrows
运行时错误“-2147217904(80040e10)"
至少一个参数没有被指定 ...

流失客户表述为:
距今1年内,客户消费不同的月数小于2(即1年内只在1或0个月份有消费过),且,迄今为止,客户消费不同月份大于或等于3.


通俗来说,就是消费3个不同月份以上的客户,未在距今1年内消费2个月以上,判断为流失客户。这样定义流失客户比较好些。
其他,总消费只有1次或2次的客户,只是过客或散客,就不能算流失客户了。

TA的精华主题

TA的得分主题

发表于 2022-12-19 14:11 | 显示全部楼层
在有3个不同月份以上的客户中,一年内开票次数按月份分类至少有两个为非流失客户
不知道这样理解对吗
一年内是>12还是大于等于12楼主自己修改

如果是按最后一次开票月份来统计
至少1个,最后的sum条件改为<1(流失客户就是求反,至少1个,求反<1)


1.png

流失客户.rar

23.37 KB, 下载次数: 7

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-12-19 14:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
代码审核中。
GIF 2022-12-19 14-26-16.gif

流失客户.zip

28.51 KB, 下载次数: 7

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-20 03:30 , Processed in 0.047992 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表