新浪博客

通过vba创建一个Excel交叉表,并优化

2024-12-04 17:58阅读:
'创建一个符合格式的透视表,字段是表格形式标签,重复标签,标签融合居中
Sub CreatePivotTable()
Dim PvtCache As PivotCache
Dim PvtTbl As PivotTable
Dim sht As Worksheet
Dim shtPivot As Worksheet

'设置数据源所在的工作表
Set sht = ThisWorkbook.Worksheets('站点汇总数据')
Set shtPivot = ThisWorkbook.Worksheets('市区统计')

'创建数据透视表缓存
Set PvtCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sht.Cells(1).CurrentRegion)
'基于缓存创建数据透视表
Set PvtTbl = PvtCache.CreatePivotTable(shtPivot.Cells(1))
' Set PvtTbl = PvtCache.CreatePivotTable(TableDestination:=shtPivot.Range('A1'), TableName:='PivotTable1')

'以下是添加字段到透视表各区域的示例,你根据实际数据和需求调整字段名称

PvtTbl.PivotFields('供服中心').Orientation = xlRowField
'将'字段1'添加到行区域
PvtTbl.PivotFields('抄表员').Orientation = xlRowField '将'字段1'添加到行区域

PvtTbl.PivotFields('抄表方式').Orientation = xlColumnField '将'字段2'添加到列区域

PvtTbl.AddDataField PvtTbl.PivotFields('电量合计'), '电量合计', xlSum '将'求和项:字段3'添加到数据区域,这里假设对字段3进行求和,若要其他计算类型可修改函数
'PvtTbl.AddDataField PvtTbl.PivotFields('电量合计'), '电量条数', xlCount '将'求和项:字段3'添加到数据区域,这里假设对字段3进行求和,若要其他计算类型可修改函数
' ActiveSheet.PivotTables('PivotTable1').AddDataField ActiveSheet.PivotTables('PivotTable1').PivotFields('电量合计'), '求和项:电量合计', xlSum
' With ActiveSheet.PivotTables('PivotTable1').PivotFields('求和项:电量合计')
' .Caption = '计数项:电量合计'
' .Function = xlCount
' End With
End Sub
Sub 透视表美化()
Dim PvtTbl
Set PvtTbl = ActiveSheet.PivotTables(1)
'透视表选项,布局:合并居中标签
PvtTbl.MergeLabels = True
'选择透视表布局是大纲\压缩\表格
' PvtTbl.RowAxisLayout xlCompactRow'报表布局:压缩
' PvtTbl.RowAxisLayout xlOutlineRow'报表布局:大纲
PvtTbl.RowAxisLayout xlTabularRow '报表布局:表格...表格的行轴布局,Axis是轴,Tabular是表格相关的意思
PvtTbl.RepeatAllLabels xlRepeatLabels '重复所有项目标签(填满空格)
'风格美化,加粗行列等
PvtTbl.ShowTableStyleColumnStripes = True '镶边列
PvtTbl.ShowTableStyleColumnHeaders = True '列标题加粗
PvtTbl.ShowTableStyleRowHeaders = True '行标题加粗,
PvtTbl.TableStyle2 = 'TableStyleMedium2' '设置一个透视表风格,配色
'是否要总计行列
PvtTbl.RowGrand = False ' 取消行总计
PvtTbl.ColumnGrand = False '取消列总计
'列顺序调整,
PvtTbl.PivotFields('抄表方式').PivotItems('远红外抄表器').Position = 1
End Sub

'对每个字段应用表格布局,效率太低
'For Each pp In PvtTbl.PivotFields
'If pp.Orientation = xlRowField Then '如果字段方向是行字段,则设置字段布局为表格形式
'pp.LayoutForm = xlTabular '表格形式而不是大纲
'pp.RepeatLabels = True '重复标签'居中合并的时候不可用
'End If
'Next
' PvtTbl.PivotFields('核算员').LayoutForm = xlTabular '用表格形式,xlOutline是用大纲的形式
' PvtTbl.PivotFields('供服中心').LayoutForm = xlTabular '用表格形式,xlOutline是用大纲的形式
''PvtTbl.PivotFields('核算员').Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)

我的更多文章

下载客户端阅读体验更佳

APP专享