Excel的透视表在我们平时的办公场景、学习以及工作中都常用到,但如果想自动化快速操作透视表,那肯定离不开VBA,但如何通过VBA自动操作透视表呢。下面列出国外一个作者有关VBA操作透视表Pivot Table代码大全,非常齐全,希望能帮助到大家。
用vba创建数据透视表可以使用PivotCaches对象的Create方法先创建一个透视表的缓存对象PivotCache
然后再用创建的PivotCache对象的CreatePivotTable方法创建PivotTable对象。
01
创建透视表
Sub CreatePivotTable()
'利用数据sheet在新sheet中创建透视表
Dim sht As Worksheet
Dim pvtCache As PivotCache
Dim pvt As PivotTable
Dim StartPvt As String
Dim SrcData As String
'Determine the data range you want to pivot
SrcData = ActiveSheet.Name & "!" & Range("A1:R100").Address(ReferenceStyle:=xlR1C1)
'创建一个新的sheet
Set sht = Sheets.Add
'Where do you want Pivot Table to start?
StartPvt = sht.Name & "!" & sht.Range("A3").Address(ReferenceStyle:=xlR1C1)
'从数据源创建透视表
Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=SrcData)
'利用缓存数据创建透视表
Set pvt = pvtCache.CreatePivotTable( _
TableDestination:=StartPvt, _
TableName:="PivotTable1")
End Sub
复制
02
删除指定的透视表
Sub DeletePivotTable()
'删除指定名称的透视表
ActiveSheet.PivotTables("PivotTable1").TableRange2.Clear
End Sub
复制
03
删除所有透视表
Sub DeleteAllPivotTables()
'删除工作簿中的所有透视表
Dim sht As Worksheet
Dim pvt As PivotTable
'循环遍历当前工作簿中所有可见的透视表
For Each sht In ActiveWorkbook.Worksheets
For Each pvt In sht.PivotTables
pvt.TableRange2.Clear
Next pvt
Next sht
End Sub
复制
04
添加透视表字段
Sub Adding_PivotFields()
'在透视表中添加字段
Dim pvt As PivotTable
Set pvt = ActiveSheet.PivotTables("PivotTable1")
'添加过滤条件
pvt.PivotFields("Year").Orientation = xlPageField
'Add item to the Column Labels
pvt.PivotFields("Month").Orientation = xlColumnField
'添加行数据
pvt.PivotFields("Account").Orientation = xlRowField
'Position Item in list
pvt.PivotFields("Year").Position = 1
'格式化字段
pvt.PivotFields("Year").NumberFormat = "#,##0"
'Turn on Automatic updates/calculations --like screenupdating to speed up code
pvt.ManualUpdate = False
End Sub
复制
05
添加透视表计算字段
Sub AddCalculatedField()
'在透视表中添加计算字段
Dim pvt As PivotTable
Dim pf As PivotField
'将透视表定义为变量
Set pvt = ActiveSheet.PivotTables("PivotTable1")
'将计算字段存储到变量
For Each pf In pvt.PivotFields
If pf.SourceName = "Inflation" Then Exit For
Next
'添加字段字段到透视表
pvt.AddDataField pf
End Sub
复制
06
添加值字段
Sub AddValuesField()
'透视表中添加值字段
Dim pvt As PivotTable
Dim pf As String
Dim pf_Name As String
pf = "Salaries"
pf_Name = "Sum of Salaries"
Set pvt = ActiveSheet.PivotTables("PivotTable1")
pvt.AddDataField pvt.PivotFields("Salaries"), pf_Name, xlSum
End Sub
复制
07
删除透视表字段
Sub RemovePivotField()
'从透视表中删除字段
'移除过滤器、行、列字段
ActiveSheet.PivotTables("PivotTable1").PivotFields("Year").Orientation = xlHidden
'移除值字段
ActiveSheet.PivotTables("PivotTable1").PivotFields("Sum of Salaries").Orientation = xlHidden
End Sub
复制
08
删除透视表计算字段
Sub RemoveCalculatedField()
'从透视表中删除字段字段
Dim pvt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
'设置变量接收透视表
Set pvt = ActiveSheet.PivotTables("PivotTable1")
'设置变量接收计算字段
For Each pf In pvt.DataFields
If pf.SourceName = "Inflation" Then Exit For
Next
'隐藏或移除计算字段
pf.DataRange.Cells(1, 1).PivotItem.Visible = False
End Sub
复制
09
按单个项目筛选透视表
Sub ReportFiltering_Single()
'单个项目筛选透视表
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable2").PivotFields("Fiscal_Year")
'清空筛选
pf.ClearAllFilters
'按条件2021筛选
pf.CurrentPage = "2021"
End Sub
复制
10
透视表多项筛选
Sub ReportFiltering_Multiple()
'多条件筛选透视表
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable2").PivotFields("Variance_Level_1")
'清空筛选
pf.ClearAllFilters
'Enable filtering on multiple items
pf.EnableMultiplePageItems = True
'关闭不需要显示的内容
pf.PivotItems("Jan").Visible = False
pf.PivotItems("Feb").Visible = False
pf.PivotItems("Mar").Visible = False
End Sub
复制
11
清除透视表筛选
Sub ClearReportFiltering()
'清楚透视表的筛选
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable2").PivotFields("Fiscal_Year")
'方法1:清楚所有筛选条件
pf.ClearAllFilters
'方法2:显示所有
pf.CurrentPage = "(All)"
End Sub
复制
12
刷新透视表
Sub RefreshingPivotTables()
'刷新透视表的数据
'刷新单个透视表
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh
'刷新所有透视表
ActiveWorkbook.RefreshAll
End Sub
复制
13
修改透视表数据源
Sub ChangePivotDataSourceRange()
' 修改透视表的数据源
Dim sht As Worksheet
Dim SrcData As String
Dim pvtCache As PivotCache
'定义数据源区域
Set sht = ThisWorkbook.Worksheets("Sheet1")
SrcData = sht.Name & "!" & Range("A1:R100").Address(ReferenceStyle:=xlR1C1)
'从数据源创建透视表缓存
Set pvtCache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:=SrcData)
'修改透视表缓存
ActiveSheet.PivotTables("PivotTable1").ChangePivotCache (pvtCache)
End Sub
复制
14
设置透视表合计
Sub PivotGrandTotals()
'设置透视表的合计方式
Dim pvt As PivotTable
Set pvt = ActiveSheet.PivotTables("PivotTable1")
'关闭行列合计
pvt.ColumnGrand = False
pvt.RowGrand = False
'打开行列合计
pvt.ColumnGrand = True
pvt.RowGrand = True
'仅行合计
pvt.ColumnGrand = False
pvt.RowGrand = True
'仅列合计
pvt.ColumnGrand = True
pvt.RowGrand = False
End Sub
复制
15
设置透视表布局
Sub PivotReportLayout()
'设置透视表布局属性
Dim pvt As PivotTable
Set pvt = ActiveSheet.PivotTables("PivotTable1")
'显示紧凑结构
pvt.RowAxisLayout xlCompactRow
'显示外边框
pvt.RowAxisLayout xlOutlineRow
'显示表格
pvt.RowAxisLayout xlTabularRow
End Sub
复制
16
格式化透视表数据
Sub PivotTable_DataFormatting()
'设置透视表数据格式
Dim pvt As PivotTable
Set pvt = ActiveSheet.PivotTables("PivotTable1")
'改变数字格式
pvt.DataBodyRange.NumberFormat = "#,##0;(#,##0)"
'改变填充色
pvt.DataBodyRange.Interior.Color = RGB(0, 0, 0)
'改变字体类型
pvt.DataBodyRange.Font.FontStyle = "Arial"
End Sub
复制
17
格式化字段数据
Sub PivotField_DataFormatting()
'格式化透视表字段数据
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Months")
'改变数据格式
pf.DataRange.NumberFormat = "#,##0;(#,##0)"
'改变颜色
pf.DataRange.Interior.Color = RGB(219, 229, 241)
'改变字体类型
pf.DataRange.Font.FontStyle = "Arial"
End Sub
复制
18
展开/折叠明细
Sub PivotField_ExpandCollapse()
'展开或折叠透视表字段
Dim pf As PivotField
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Month")
'折叠
pf.ShowDetail = False
'展开
pf.ShowDetail = True
End Sub
复制

更多Excel与统计分析知识,扫码关注:全栈数据
文章转载自全栈数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1233次阅读
2025-04-27 16:53:22
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
692次阅读
2025-04-30 15:24:06
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
583次阅读
2025-04-14 09:40:20
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
497次阅读
2025-04-17 17:02:24
一页概览:Oracle GoldenGate
甲骨文云技术
473次阅读
2025-04-30 12:17:56
GoldenDB数据库v7.2焕新发布,助力全行业数据库平滑替代
GoldenDB分布式数据库
467次阅读
2025-04-30 12:17:50
优炫数据库成功入围新疆维吾尔自治区行政事业单位数据库2025年框架协议采购!
优炫软件
356次阅读
2025-04-18 10:01:22
国产数据库图谱又上新|82篇精选内容全览达梦数据库
墨天轮编辑部
270次阅读
2025-04-23 12:04:21
给准备学习国产数据库的朋友几点建议
白鳝的洞穴
253次阅读
2025-05-07 10:06:14
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
253次阅读
2025-04-28 11:01:25