本节介绍对数据透视表的指定字段进行排序和筛选。
数据透视表的排序
使用PivotField对象的AutoSort方法对指定字段进行排序。下面创建数据透视表,对字段“求和项:金额”进行降序排列。
【Excel VBA】
示例文件的存放路径为Samples\ch19\Excel VBA\排序.xlsm。运行CreatePVT过程,生成数据透视表。Sort过程用PivotField对象的AutoSort方法对字段“求和项:金额”进行降序排列。
code.vba
Sub Sort()
'省略,获取数据透视表pvt
'…
pvt.PivotFields("产地").AutoSort _
Order:=xlDescending, Field:="求和项:金额"
End Sub
运行过程,生成数据透视表如图7-10所示。
图7-10 对字段“求和项:金额”按降序排列
【Python】
编写Python脚本,脚本文件的存放路径为Samples\ch19\Python\排序.py。
code.vba
#前面代码省略,请参见Python文件
#......
#排序
pvt.PivotFields('产地').AutoSort(\
Order=xw.constants.SortOrder.xlDescending, \
Field='求和项:金额')
运行脚本,生成数据透视表如图7-10所示。
数据透视表的筛选
指定字段取单个值或者多个值,可以实现数据透视表的单选和多选。
【Excel VBA】
示例文件的存放路径为Samples\ch19\Excel VBA\筛选.xlsm。运行CreatePVT过程,生成数据透视表。Filter1过程指定使用“类别”字段的“蔬菜”值。
code.vba
Sub Filter1()
'省略,获取数据透视表pvt
'…
Dim pf As PivotField
Set pf = pvt.PivotFields("类别") '“类别”字段
pf.ClearAllFilters
pf.CurrentPage = "蔬菜" '选择值
End Sub
运行过程,生成数据透视表如图7-11所示。
图7-11 用“类别”字段的“蔬菜”值筛选数据透视表
Filter2过程指定隐藏“产地”字段的“澳大利亚”、“加拿大”和“英国”3个透视项。
code.vba
Sub Filter2()
'筛选-多选
Dim shtPVT As Worksheet
Dim pvt As PivotTable
Dim pf As PivotField
Set shtPVT = Worksheets("数据透视表")
Set pvt = shtPVT.PivotTables("透视表")
Set pf = pvt.PivotFields("产地")
pf.ClearAllFilters
'pf.EnableMultiplePageItems = True
pf.PivotItems("澳大利亚").Visible = False
pf.PivotItems("加拿大").Visible = False
pf.PivotItems("英国").Visible = False
End Sub
运行过程,生成数据透视表如图7-12所示。
图7-12 隐藏“产地”字段的多个透视项
【Python】
编写Python脚本,脚本文件的存放路径为Samples\ch19\Python\筛选.py。
code.vba
#前面代码省略,请参见Python文件
#......
使用两种方法进行筛选。
code.vba
#筛选-单选
pf = pvt.PivotFields("类别")
pf.ClearAllFilters
pf.CurrentPage = "蔬菜"
或者
code.vba
#筛选-多选
pf2 = pvt.PivotFields(“产地”)
pf2.ClearAllFilters
pf2.PivotItems(“澳大利亚”).Visible = False
pf2.PivotItems(“加拿大”).Visible = False
pf2.PivotItems(“英国”).Visible = False
选择单选或多选,运行脚本,生成数据透视表如图7-11和图7-12所示。[大谦Excel,dqexcel点com]