课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
这几天写代码用到了数据透视表,那这节我们就来看下怎样用VBA来做一个简单的数据透视表。
有一个简单的表,表头里有股票代码,持股的机构名称、机构属性、持股数量等,现在要用数据透视表将该表做一个统计,行标签是股票代码,列标签是机构属性,要对持股数量做求和,对机构属性做计数,看代码:
Sub Macro1()
Dim PTcache As PivotCache
Dim PT As PivotTable
Sheet2.Cells.Clear
Set PTcache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets("Sheet1").Range("A1:I338"), Version:=xlPivotTableVersion12) '数据区域
Set PT = PTcache.CreatePivotTable(TableDestination:=Sheets("Sheet2").Range("A1"), TableName:="数据透视表1", DefaultVersion:=xlPivotTableVersion12) '目标位置
With PT.PivotFields("代码") '字段放置在行标签
.Orientation = xlRowField
.Position = 1
End With
With PT.PivotFields("机构属性") '字段放置在列标签
.Orientation = xlColumnField
.Position = 1
End With
With PT.PivotFields("持股总数(万股)")
.Orientation = xlDataField '字段放置在数据区域
.Function = xlSum '统计方式是求和
.Position = 1 '排在第1位,一般不需要这个,顺序来就可以了
End With
With PT.PivotFields("机构属性")
.Orientation = xlDataField
.Function = xlCount '统计方式是计数
.Position = 2
End With
End Sub
做透视表可以录制宏,但是会有一定的问题,比如说这里我的列标签是机构属性,而我数据区域又要对每个代码对应的机构属性进行计数,当你运行录制的宏时会发现列标签的机构属性不见了,如果录制的代码出现这种问题那就自己动手写吧。上面的代码标注的很清楚了,第1行是指定数据区域的,第2行是指定表位置的。下面将“代码”字段放到行标签,再下面将“机构属性”放到列标签,里面的Position指的是一个标签里有多个字段时该字段的位置,如果你是顺序写的这个属性就无所谓了。再下面是数据区域的字段,Function属性是指明统计的方式,常用的如下
计算类型 | 值 |
求和 | xlsum |
计数 | xlcount |
平均值 | xlaverage |
乘积 | xlproduct |
最大值 | xlmax |
最小值 | xlmin |
数值计数 | xlcountnum |
先讲这些,本节示例文件下载地址:http://pan.baidu.com/s/1dDgrwS5。