【教程】VBA创建数据透视表
2015-02-15 15:10阅读:
名词解释:
- PivotTables——数据透视表。
- PivotCaches——数据透视表缓存。数据缓冲区,充当数据源和透视表之间的传递途径。优点:1)很大程度上控制了从数据源中获得的数据,尤其是与ADO协作时,可对外部数据源实现高级编程控制,有很大的灵活性,2)从同一数据源生成多个数据透视表(也可以使用PivotTable集合,无特别优势,只是提供丰富性选择),这比强制每个数据透视表维护自己的数据源更有效率。
- set
pvt=Activesheet.PivotTables.add(PivotCache:=pvc,tabledestination:=range('A3'))
PivotFields——数据透视字段。包括源数据所有字段以及已添加的计算字段(源数据表不可见)。
两种技术添加:1)PivotTable.AddFields方法;addfields方法可以添加多个行字段/列字段或者页字段,添加的新字段将替换任何现有的字段,除非addtotable=true,不能用来添加或者替换数据字段。2)给PivotField对象的Orientation属性赋值。
With
Activesheet.PivotTables(1)
'添加新的行字段state
.AddFields
RowFields:='state',AddToTable:=true
'将date字段作为新的页字段
-
.PivotFields('date').Orientation=xlPageField
End with
- PivotItems——数据透视项。是PivotField对象的方法而非属性,包含在字段中的唯一值。
- PivotCharts——数据透视图
Sub
creatpivotchart()
Dim shp As
Shape
'在shape对象中创建图表
Set shp =
activehseet.Shapes.AddChart(xlColumnStacked)
shp.Chart.SetSourceData
Source:=ActiveSheet.PivotTables(1).TableRange1,
PlotBy:=xlsoumns
'调整图表大小位置与某单元格区域相同
With
Range('a11:f28')
shp.Left
= .Left
shp.Top
= .Top
shp.Width
= .Width
shp.Height
= .Height
End With
'更改数据透视表和数据透视图的布局
With
shp.Chart.PivotLayout.PivotTable
.PivotFields('customer').Orientation =
xlColumnField
.PivotFields('product').Orientation =
xlRowField
End With
'修改数据透视图的格式
-
shp.Chart.ChartType
= xlCylinderColStacked
End Sub
Excel录制宏代码:
优化过的通用代码:
Sub CreatePivotTable()
Dim wks As Worksheet
Dim pvc As PivotCache
Dim pvt As PivotTable
'添加新工作表
Set wks =
Worksheets.Add
- '建立数据透视表缓存
Set pvc = ActiveWorkbook.PivotCaches.Create(
_
SourceType:=xlDatabase, _
SourceData:=Sheet1.ListObjects('table1').Range)
'引用区域可以是range,表或者自定义名称,如名称可以写为:SourceData:='database'
'创建数据透视表,tabledestination为数据透视表的最左上方区域
Set pvt =
pvc.CreatePivotTable(tabledestination:=wks.Range('a3'),
_
defaultversion:=xlPivotTableVersion12)
- 'xlPivotTableVersion12为Excel2007及以上版本的默认模板,见XlPivotTableVersionList
枚举 (Excel)
'定义数据透视表的字段
With pvt
- '添加行字段方法1,AddFields方法,可以跟Array函数配合使用,批量设置字段,字段名称必须跟透视表源数据的字段名字完全一样,否则会出错;可以添加页字段,行字段和列字段,不能添加数据项
.AddFields
RowFields:=Array('客户名称',
'生产单号', '类别',
'运营商', '厂家',
'品名',
_
'匹配电源',
'匹配电源口径',
'产品代数', '端口数量',
'其它',
'调用名称单号记录'), _