VBA 创建透视表,录制宏,自动化报表


一. 数据准备

⏹数据源1

姓名学科成绩
丁志敏语文91
李平平语文81
王刚语文64
张伊语文50
王松语文66
卢海军语文87
丁志敏数学52
李平平数学61
王刚数学74
张伊数学40
王松数学64
卢海军数学86
丁志敏英语61
李平平英语45
王刚英语67
张伊英语92
王松英语79
卢海军英语74

⏹数据源2

姓名班级
丁志敏一班
李平平一班
王刚一班
张伊二班
王松二班
卢海军二班

二. 需求

数据源1和数据源2中的数据每个月都会更新,现在要求创建一个自动化报表,当数据源中的数据变化时,能自动将数据反映,并自动完成统计。

⏹数据处理的效果如下图所示
在这里插入图片描述


三. 准备好报表模板

⏹如下图所示,报表的模板的合计区域,先提前预埋好统计公式,为之后的录制宏做准备。

在这里插入图片描述


四. 执行统计操作,录制宏

⏹在开发工具选项卡,选择录制宏,指定好宏名称之后,开始录制。
宏开始录制之后,我们对Excel的所有操作都会被记录下来,由Excel自动转换为VBA代码。

在这里插入图片描述

4.1 根据数据源创建透视表

⏹数据源1中的数据较为分散,不利于统计汇总。

  • 我们可以根据数据源1中的数据创建数据透视表,方便统计。
  • 创建数据透视表的过程,如下图所示
  • 💥因为是在开启录制宏的状态下创建透视表,因此创建的过程也会被宏记录下来转换为VBA代码。

在这里插入图片描述

4.2 填充数据到报表

⏹根据姓名,使用VLOOKUP公式,从数据源1和数据源2中将班级和各个学科的成绩匹配到报表中。

在这里插入图片描述
⏹然后,下拉自动填充全部姓名相关的数据,因为数据都是通过公式填充的,最后再复制全部的数据,然后粘贴为值

在这里插入图片描述

4.3 结束宏录制

⏹将透视表,数据源1,数据源2sheet页中的数据清空之后,点击停止录制,结束宏的录制
🤔之所以要清空这些数据,是为了自动化考虑。这样下一次使用宏之前,无需手动清空上一次的数据源之后,然后再粘贴新的数据源了。
在这里插入图片描述


五. 执行录制好的宏,自动化报表

⏹如下图所示,点击,选择执行宏,就可以自动进行批量计算。
这样每次只需要更换数据源,执行一下宏,就可以自动完成计算了。

在这里插入图片描述
🧐上图中的计算过程中,页面有闪动效果。如果不想要看到,可以在对应宏的VBA代码中,加上下面这两行代码。

Excel.Application.ScreenUpdating = Fals
' 省略中间代码
Excel.Application.ScreenUpdating = True

在这里插入图片描述

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL+数据透视+VBA 使数据透视走向更灵活,更智能,更适用。 这个是我和师傅一撇首度合作,他提供了文件并提出了要求,我帮他实现其效果 下面从几个方面解释一下: 1、功能 一个源文件和一个通过用SQL查询生成的数据透视 将源文件拖到电脑的任意位置,甚至将文件名也改掉,用VBA配上代码和窗体找到文件,数据透视仍然能够正常工作 2、套用 现在来讲讲怎么使做出来的东东适应大家的需要 2、1 用OLE DB窗口引用工作或写SQL语句,因为用这个方法同VBA相通,copy下来代码区的的语句 2、2 打开透视文件,将透视中的字段全部拖出来,也就是变成一个空数据透视。 右击下面工作图标 或者 工具》》visual basic 编辑器,点击模块看到代码区 2、3 将2、1步骤copy的语句commandtext的数据Array中的引号中 .CommandText = Array(" ") 可能不同版本会有一些差别,同时SQL语句中如果添加了文本生成新字段,双引号要成对翻倍 如:"出库" AS 单选项 要改成 ""出库"" AS 单选项 2、4 语句太长的处理:在代码区如果你想好看一些,你可以插入“ _”来换行,当然不能插在一个单词或自动名等中间。 2、5 将文件存盘,重新打开就会有了数据,你可以将字段拖入数据透视中,创建你自己的数据透视, 2、6 这样文件就可以使用,相信VBA的引导不用教就可以交给别人使用了 下面附上代码,包含3个区: 1、 工作簿去,打开文件时工作 Private Sub Workbook_Open() Dim OP If Dir(Sheets("path").Range("A1")) = "" Then OP = MsgBox("源文件已被移走,请选择下列选项" + Chr(10) + "1、选择是,重新输入文件全名" + Chr(10) + "2、选择否,打开原有的数据透视" + Chr(10) + "3、选择取消,关闭文件", vbYesNoCancel, "Scarlett温馨提示") If OP = vbYes Then UserForm1.Show End If If OP = vbNo Then ActiveWorkbook.Close True End If If OP = vbCancel Then Exit Sub End If Else Call refreshpv End If End Sub 2、窗体区,实现文件的查找 Private Sub CommandButton1_Click() Dim fopen As FileDialog Set fopen = Application.FileDialog(msoFileDialogFilePicker) fopen.Show TextBox1.Value = fopen.SelectedItems(1) Set fopen = Nothing End Sub Private Sub CommandButton2_Click() If InStr(TextBox1.Value, ".") > 0 Then Sheets("path").Range("A1") = TextBox1.Value Call refreshpv unload me Else MsgBox "文件名要带路径含后缀的文件名", "Scarlett_88温馨提示" TextBox1.SetFocus End If End Sub Private Sub CommandButton3_Click() Unload Me End Sub Private Sub TextBox1_Change() End Sub Private Sub UserForm_Activate() End Sub Private Sub UserForm_Click() TextBox1.Value = Sheets("path").Range("A1") End Sub 3、模块区,实现SQL语句的地址更新和刷新数据透视的数据源 Sub refreshpv() With ActiveSheet.PivotTables("数据透视1").PivotCache .Connection = Array( _ "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Sourc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值