数据分析(入门篇)-第四章-让报告自动化(VBA)-Part1(Excel报告自动化)
2017-07-10 22:56
645 查看
VBA是一种通用的自动化语言,可以使Excel常用操作步骤自动化。
VBA基本概念:对象、属性、方法、事件
VBA调试技巧:立即窗口、监视窗口、本地窗口、编辑窗口
Excel日报自动化原理:
源数据:
提取到Excel中:
数据转化区:
日报正文区:
VBA代码:
后记:
1. VBA代码是在原示例的基础上作了改进(可以批量提取数据,而非只提取一天的值)
2. 学习了Offset函数,很有用哦
VBA基本概念:对象、属性、方法、事件
VBA调试技巧:立即窗口、监视窗口、本地窗口、编辑窗口
Excel日报自动化原理:
源数据:
提取到Excel中:
数据转化区:
日报正文区:
VBA代码:
Sub initialize() '声明定义VBA语句中需要使用到的各个变量类型 Dim AdoConn As New ADODB.Connection '定义变量AdoConn为连接数据库对象(ADODB是数据库访问组件,Connection是其中的一个对象),用于实现连接数据库连接等操作 Dim MyData As String '定义变量MyData为字符串型变量,用于数据库路径赋值 Dim D1 As Date '定义D1为日期型变量,用于业务日期赋值 Dim D2 As Date '定义D2为日期型变量,用于业务日期赋值 Dim i As Integer '定义i为循环变量,用于初始化时基于数据库数据循环赋值 '定义SQL语句所需要的4个字符串变量 Dim strSQL1 As String Dim strSQL2 As String Dim strSQL3 As String Dim strSQL4 As String i = 2 '表头占用一行,数据从第二行开始 MyData = ThisWorkbook.Path & "\业务数据库.accdb" '制定Access数据库文件完整路径 '建立数据库连接 With AdoConn .provider = "Microsoft.ace.oledb.12.0" .Open MyData End With '从第二行开始循环赋值 Do While ActiveSheet.Cells(i, "B").Value <> "" D1 = ActiveSheet.Cells(i, "B") D2 = D1 + 1 '设置SQL查询语句 strSQL1 = "SELECT count(用户ID) FROM 用户明细 WHERE 注册日期<#" & D2 & "#AND 注册日期>=#" & D1 & "#" '新增用户数 strSQL2 = "SELECT count(用户ID) FROM (SELECT DISTINCT 用户ID FROM 订购明细 WHERE 订购日期<#" & D2 & "# AND 订购日期>=#" & D1 & "#)" '订购用户数 strSQL3 = "SELECT count(订单编号), sum(订购金额) FROM 订购明细 WHERE 订购日期<#" & D2 & "# AND 订购日期>=#" & D1 & "#" '订单数,业务收入 strSQL4 = "SELECT count(用户ID) FROM (SELECT DISTINCT 用户ID FROM 订购明细 WHERE 订购日期<#" & D2 & "#)" '累计订购用户数 '执行查询并赋值 ActiveSheet.Cells(i, 3).CopyFromRecordset AdoConn.Execute(strSQL1) ActiveSheet.Cells(i, 4).CopyFromRecordset AdoConn.Execute(strSQL2) ActiveSheet.Cells(i, 5).CopyFromRecordset AdoConn.Execute(strSQL3) ActiveSheet.Cells(i, 7).CopyFromRecordset AdoConn.Execute(strSQL4) If (i >= 3) Then ActiveSheet.Cells(i, 8).Value = ActiveSheet.Cells(i - 1, 8).Value + ActiveSheet.Cells(i, 3).Value ActiveSheet.Cells(i, 9).Value = ActiveSheet.Cells(i - 1, 9).Value + ActiveSheet.Cells(i, 5).Value ActiveSheet.Cells(i, 10).Value = ActiveSheet.Cells(i - 1, 10).Value + ActiveSheet.Cells(i, 6).Value End If i = i + 1 Loop AdoConn.Close Set AdoConn = Nothing MsgBox "数据提取完毕!" End Sub Sub update() Dim AdoConn As New ADODB.Connection Dim MyData As String Dim N As Integer Dim D1 As Date Dim D2 As Date Dim strSQL1 As String Dim strSQL2 As String Dim strSQL3 As String Dim strSQL4 As String D1 = Date D2 = D1 + 1 i = 2 MyData = ThisWorkbook.Path & "\业务数据库.accdb" With AdoConn .provider = "Microsoft.ACE.OLEDB.12.0" .Open MyData End With N = ActiveSheet.Range("C1").End(xlDown).Row + 1 strSQL1 = "SELECT count(用户ID) FROM 用户明细 WHERE 注册日期<#" & D2 & "#AND 注册日期>=#" & D1 & "#" strSQL2 = "SELECT count(用户ID) FROM (SELECT DISTINCT 用户ID FROM 订购明细 WHERE 订购日期<#" & D2 & "# AND 订购日期>=#" & D1 & "#)" strSQL3 = "SELECT count(订单编号), sum(订购金额) FROM 订购明细 WHERE 订购日期<#" & D2 & "# AND 订购日期>=#" & D1 & "#" strSQL4 = "SELECT count(用户ID) FROM (SELECT DISTINCT 用户ID FROM 订购明细 WHERE 订购日期<#" & D2 & "#)" ActiveSheet.Cells(N, 3).CopyFromRecordset AdoConn.Execute(strSQL1) ActiveSheet.Cells(N, 4).CopyFromRecordset AdoConn.Execute(strSQL2) ActiveSheet.Cells(N, 5).CopyFromRecordset AdoConn.Execute(strSQL3) ActiveSheet.Cells(N, 7).CopyFromRecordset AdoConn.Execute(strSQL4) ActiveSheet.Cells(N, 1).Value = ActiveSheet.Cells(N - 1, 1).Value + 1 ActiveSheet.Cells(N, 2).Value = Date ActiveSheet.Cells(N, 8).Value = ActiveSheet.Cells(N - 1, 8).Value + ActiveSheet.Cells(N, 3).Value ActiveSheet.Cells(N, 9).Value = ActiveSheet.Cells(N - 1, 9).Value + ActiveSheet.Cells(N, 5).Value ActiveSheet.Cells(N, 10).Value = ActiveSheet.Cells(N - 1, 10).Value + ActiveSheet.Cells(N, 6).Value AdoConn.Close Set AdoConn = Nothing MsgBox "数据更新完毕!" End Sub
后记:
1. VBA代码是在原示例的基础上作了改进(可以批量提取数据,而非只提取一天的值)
2. 学习了Offset函数,很有用哦
相关文章推荐
- 学以致用——Excel连接Oracle生成iKB报告——Part1(使用VBA从数据库提取汇总数据)
- 数据分析(入门篇)-第二章-玩转数据分析-Part1(Excel数据分析工具-PowerPivot)
- Excel数据分析与业务建模_第四章_匹配函数MATCH(语法详解及应用实例)
- Excel VBA高效办公应用-第五章-销售数据的处理与分析-Part2(多条件筛选及判定)
- Excel在统计分析中的应用—第三章—数据库统计函数与数据透视表-Part1-(数据查询与筛选、分类汇总)
- excel数据分析入门第二周
- 数据分析(入门篇)-第二章-玩转数据分析-Part4(Excel数据分析工具库-抽样分析)
- 用Excel演示python中pandas中数据的查询显示方法-python数据分析入门
- 数据分析(入门篇)-第二章-玩转数据分析-Part5(Excel数据分析工具库-相关分析)
- pl/sql入门第四章--数据库数据对象分析(上)
- 数据分析(入门篇)-第二章-玩转数据分析-Part2(Excel数据分析工具库-描述性统计分析)
- 数据分析(入门篇)-第四章-三心二意——数据处理
- 数据分析(入门篇)-第三章-Show出你的数据-Part1(地图)
- Excel数据分析入门-双坐标柱状图
- Excel VBA高效办公应用-第四章-用VBA处理市场调查问卷数据
- 数据分析(入门篇)-第一章-高效处理千万数据-Part1(Microsoft Access数据库)
- 数据分析EXCEL入门必备
- 学以致用——ikb知识库英文词条词频分析-Part1-数据提取(VBA)
- 数据分析(入门篇)-第二章-玩转数据分析-Part7(Excel数据分析工具库-移动平均)
- 一个 VBA for Excel 的DFT 类用以分析离线数据