处理数量较大的数据时,一般分为数据获取、数据筛选,以及结果展示几个步骤。在 Excel 中,我们可以利用数据透视表(Pivot Table)方便快捷的实现这些工作。
本文首先手把手的教你如何在 Excel 中手动构建一个基本的数据透视表,最后用 VBA 展示如何自动化这一过程。
注:
1
源数据
Excel 提供了丰富的数据来源,我们可以从 HTML、文本、数据库等处获取数据。
这个步骤本文不展开讨论,以下是我们作为分析来源的工作表数据:
2
创建数据透视表
注意观察对话框中的各种选项,这里我们都采用默认值
点击“确定”后,一个空的数据透视表出现在了新工作表中:
3
数据透视表中的字段
此时一个基本的数据透视表已经成型
4
增加自定义字段
有时基本的字段并不能满足分析的需要,此时就可以在数据透视表中插入基于公式计算的自定义字段。
下面用不同的方法加入两个自定义字段:
首先简单计算一下各队的场均进球数:
再简单的评估一下球队的防守质量,这里我们假设以如下 Excel 公式判断:
= IF(净胜球>=0,2,1)
防守还不错的取 2,不佳的则标记为 1。
5
利用切片器过滤数据
除了可以在“数据透视表生成器”中指定若干个“过滤器”,切片器(Slicers)也可以用来过滤数据,使分析工作更清晰化。
切片器的创建非常简单:
6
成果
至此,我们得到了一个基于源数据的、可以自由组合统计维度、可以用多种方式筛选展示的数据透视表。
可以在 Ribbon 的“设计”菜单中选择预设的样式等,本文不展开论述。
以上就是创建数据透视表的基本过程。
7
自动化创建
基本的数据透视表的创建和调整并不复杂,但如果有很多类似的重复性工作的话,使用一些简单的 VBA 来自动化这一过程,将极大提升工作的效率。
本例中使用 VBA 脚本完成与上述例子一样的任务,对于 VBA 语言仅做简单注释,想更多了解可以自行查阅官方的文档等
此处我们放置一个按钮在源数据所在的数据表,用于每次点击自动生成一个数据透视表。
Sub onCreatePovit()
Application.DisplayAlerts = False
' 声明变量
Dim sheet1 As Worksheet
Dim pvtTable As PivotTable
Dim pvtField As PivotField
Dim pvtSlicerCaches As SlicerCaches
Dim pvtSlicers As slicers
Dim pvtSlicer As Slicer
' 删除可能已存在的透视表
Dim existFlag As Boolean
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name = "pivot1" Then existFlag = True: Exit For
Next
If existFlag = True Then
Sheets("pivot1").Select
ActiveWindow.SelectedSheets.Delete
End If
' 初始化
Set sheet1 = ActiveWorkbook.Sheets("sheet1")
Set pvtSlicerCaches = ActiveWorkbook.SlicerCaches
' 指定数据源
sheet1.Select
Range("A1").Select
' 创建透视表
Set pvtTable = sheet1.PivotTableWizard
ActiveSheet.Name = "pivot1"
' 指定行和列
pvtTable.AddFields _
RowFields:=Array("平", "球队"), _
ColumnFields:="Data"
' 指定数据字段
Set pvtField = pvtTable.PivotFields("失球")
pvtField.Orientation = xlDataField
pvtField.Function = xlAverage
pvtField.Name = "平均值/失球"
Set pvtField = pvtTable.PivotFields("进球")
pvtField.Orientation = xlDataField
pvtField.Function = xlAverage
pvtField.Name = "平均值/进球"
Set pvtField = pvtTable.PivotFields("积分")
pvtField.Orientation = xlDataField
pvtField.Function = xlAverage
pvtField.Name = "平均值/积分"
' 指定计算字段
pvtTable.CalculatedFields.Add Name:="场均进球", Formula:="=进球/场次"
Set pvtField = pvtTable.PivotFields("场均进球")
pvtField.Orientation = xlDataField
pvtField.Function = xlAverage
pvtField.Name = "平均值/场均进球"
pvtTable.CalculatedFields.Add Name:="防守质量", Formula:="= IF(净胜球>=0,2,1)"
Set pvtField = pvtTable.PivotFields("防守质量")
pvtField.Orientation = xlDataField
pvtField.Function = xlCount
pvtField.Name = "计数/防守质量"
' 指定切片器
Set pvtSlicers = pvtSlicerCaches.Add(pvtTable, "胜", "胜_" & ActiveSheet.Name).slicers
Set pvtSlicer = pvtSlicers.Add(ActiveSheet, , , , 300, 400)
Set pvtSlicers = pvtSlicerCaches.Add(pvtTable, "负", "负_" & ActiveSheet.Name).slicers
Set pvtSlicer = pvtSlicers.Add(ActiveSheet, , , , 350, 450)
' 指定过滤器
Set pvtField = pvtTable.PivotFields("更新日期")
pvtField.Orientation = xlPageField
Application.DisplayAlerts = True
End Sub
3.运行程序
回到界面中,每次点击按钮就会在新工作表中生成结构和之前例子一致的数据透视表
8
总结
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有