原数据 (第一行数据有空白格子,最好还是填上0。因为制作原理是它要先选定从a1格子开始一块全部有内容的矩阵,即A1:M2)
效果
代码
Sub Generate()
Dim ptcache As PivotCache
Dim pt As PivotTable
Dim prange As Range
Set ws = Sheet1
For Each pt In Sheet2.PivotTables
pt.TableRange2.Clear
Next pt
'下面这句话前半部分是在这个excel的pivot缓存里面加入个数据源。
Set ptcache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Sheet1.Range("A1").CurrentRegion.Address)
Set pt = ptcache.CreatePivotTable(tabledestination:=Sheet2.Range("A3"), tablename:="透视表1")
pt.ManualUpdate = True
pt.AddFields RowFields:="项目", ColumnFields:="Data"
For Each prange In ws.Range(ws.Cells(1, 2), ws.Cells(1, 16384).End(xlToLeft)) '开始改数据源了,后半句:防止表中有空白的格子导致之后的数据被遗漏
With pt.PivotFields(prange.Value)
.Orientation = xlDataField '这种恶心的东西(.orientation?)目前本人看不懂,学习完数据透视表基础,赶紧去了解VBA那些常用的function吧。
.Name = " " & prange '这种恶心的东西目前本人看不懂,学习完数据透视表基础,赶紧去了解VBA那些常用的function吧。
.Function = xlSum
End With
Next prange
pt.ManualUpdate = False
End Sub
后记:对于恶心的东西,可以先注销掉,然后就知道他们的效果了。首先orientation貌似是决定了那个function = xlsum怎么去计算这个sum的,它的依据是这个datafield。
然后又注销了name发现就是每列标题啦。prange就是标题名称,前面的" " 防止标题挤到最左边顶格,那样不太美观。