数据透视表的排序和筛选

本节介绍对数据透视表的指定字段进行排序和筛选。

数据透视表的排序

使用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所示。

Document Image

图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所示。

Document Image

图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所示。

Document Image

图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]