Excel的透视表在我们平时的办公场景、学习以及工作中都常用到,但如果想自动化快速操作透视表,那肯定离不开VBA,但如何通过VBA自动操作透视表呢。下面列出国外一个作者有关VBA操作透视表Pivot Table代码大全,非常齐全,希望能帮助到大家。
用vba创建数据透视表可以使用PivotCaches对象的Create方法先创建一个透视表的缓存对象PivotCache
然后再用创建的PivotCache对象的CreatePivotTable方法创建PivotTable对象。
01
创建透视表
Sub CreatePivotTable()'利用数据sheet在新sheet中创建透视表Dim sht As WorksheetDim pvtCache As PivotCacheDim pvt As PivotTableDim StartPvt As StringDim SrcData As String'Determine the data range you want to pivotSrcData = ActiveSheet.Name & "!" & Range("A1:R100").Address(ReferenceStyle:=xlR1C1)'创建一个新的sheetSet 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.ClearEnd Sub
03
删除所有透视表
Sub DeleteAllPivotTables()'删除工作簿中的所有透视表Dim sht As WorksheetDim pvt As PivotTable'循环遍历当前工作簿中所有可见的透视表For Each sht In ActiveWorkbook.WorksheetsFor Each pvt In sht.PivotTablespvt.TableRange2.ClearNext pvtNext shtEnd Sub
04
添加透视表字段
Sub Adding_PivotFields()'在透视表中添加字段Dim pvt As PivotTableSet pvt = ActiveSheet.PivotTables("PivotTable1")'添加过滤条件pvt.PivotFields("Year").Orientation = xlPageField'Add item to the Column Labelspvt.PivotFields("Month").Orientation = xlColumnField'添加行数据pvt.PivotFields("Account").Orientation = xlRowField'Position Item in listpvt.PivotFields("Year").Position = 1'格式化字段pvt.PivotFields("Year").NumberFormat = "#,##0"'Turn on Automatic updates/calculations --like screenupdating to speed up codepvt.ManualUpdate = FalseEnd Sub
05
添加透视表计算字段
Sub AddCalculatedField()'在透视表中添加计算字段Dim pvt As PivotTableDim pf As PivotField'将透视表定义为变量Set pvt = ActiveSheet.PivotTables("PivotTable1")'将计算字段存储到变量For Each pf In pvt.PivotFieldsIf pf.SourceName = "Inflation" Then Exit ForNext'添加字段字段到透视表pvt.AddDataField pfEnd Sub
06
添加值字段
Sub AddValuesField()'透视表中添加值字段Dim pvt As PivotTableDim pf As StringDim pf_Name As Stringpf = "Salaries"pf_Name = "Sum of Salaries"Set pvt = ActiveSheet.PivotTables("PivotTable1")pvt.AddDataField pvt.PivotFields("Salaries"), pf_Name, xlSumEnd Sub
07
删除透视表字段
Sub RemovePivotField()'从透视表中删除字段'移除过滤器、行、列字段ActiveSheet.PivotTables("PivotTable1").PivotFields("Year").Orientation = xlHidden'移除值字段ActiveSheet.PivotTables("PivotTable1").PivotFields("Sum of Salaries").Orientation = xlHiddenEnd Sub
08
删除透视表计算字段
Sub RemoveCalculatedField()'从透视表中删除字段字段Dim pvt As PivotTableDim pf As PivotFieldDim pi As PivotItem'设置变量接收透视表Set pvt = ActiveSheet.PivotTables("PivotTable1")'设置变量接收计算字段For Each pf In pvt.DataFieldsIf pf.SourceName = "Inflation" Then Exit ForNext'隐藏或移除计算字段pf.DataRange.Cells(1, 1).PivotItem.Visible = FalseEnd Sub
09
按单个项目筛选透视表
Sub ReportFiltering_Single()'单个项目筛选透视表Dim pf As PivotFieldSet pf = ActiveSheet.PivotTables("PivotTable2").PivotFields("Fiscal_Year")'清空筛选pf.ClearAllFilters'按条件2021筛选pf.CurrentPage = "2021"End Sub
10
透视表多项筛选
Sub ReportFiltering_Multiple()'多条件筛选透视表Dim pf As PivotFieldSet pf = ActiveSheet.PivotTables("PivotTable2").PivotFields("Variance_Level_1")'清空筛选pf.ClearAllFilters'Enable filtering on multiple itemspf.EnableMultiplePageItems = True'关闭不需要显示的内容pf.PivotItems("Jan").Visible = Falsepf.PivotItems("Feb").Visible = Falsepf.PivotItems("Mar").Visible = FalseEnd Sub
11
清除透视表筛选
Sub ClearReportFiltering()'清楚透视表的筛选Dim pf As PivotFieldSet 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.RefreshAllEnd Sub
13
修改透视表数据源
Sub ChangePivotDataSourceRange()' 修改透视表的数据源Dim sht As WorksheetDim SrcData As StringDim 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 PivotTableSet pvt = ActiveSheet.PivotTables("PivotTable1")'关闭行列合计pvt.ColumnGrand = Falsepvt.RowGrand = False'打开行列合计pvt.ColumnGrand = Truepvt.RowGrand = True'仅行合计pvt.ColumnGrand = Falsepvt.RowGrand = True'仅列合计pvt.ColumnGrand = Truepvt.RowGrand = FalseEnd Sub
15
设置透视表布局
Sub PivotReportLayout()'设置透视表布局属性Dim pvt As PivotTableSet pvt = ActiveSheet.PivotTables("PivotTable1")'显示紧凑结构pvt.RowAxisLayout xlCompactRow'显示外边框pvt.RowAxisLayout xlOutlineRow'显示表格pvt.RowAxisLayout xlTabularRowEnd Sub
16
格式化透视表数据
Sub PivotTable_DataFormatting()'设置透视表数据格式Dim pvt As PivotTableSet 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 PivotFieldSet 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 PivotFieldSet pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("Month")'折叠pf.ShowDetail = False'展开pf.ShowDetail = TrueEnd Sub

更多Excel与统计分析知识,扫码关注:全栈数据

文章转载自全栈数据,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




