除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/533.html,VBA交流群273624828。
这几天写代码用到了数据透视表,那这节我们就来看下怎样用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。
|