加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2024-12-04 17:58:10)
'创建一个符合格式的透视表,字段是表格形式标签,重复标签,标签融合居中
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)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有