ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 197|回复: 4

[求助] 透视表中怎样进行行列快速互换?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-12-1 12:34 | 显示全部楼层 |阅读模式
朋友们,请教一下,透视表中有一个棘手的问题,有时候需要行列互换,但是使用的筛选比较多,比如我的行放了4级标签,列有1个字段,现在需要行列互换,我只能把行标签里的4个字段逐一拖动到列标签,再把原来列标签里的那个字段拖动到行标签,感觉很不方便,有没有一种办法可以点击一个键就实现这样的操作呢?逐一拖动没有意义,而且容易误操作,我原来使用拖动,现在就点那个小箭头,选择移动到行标签,这样也挺慢的

之所以先把4个字段先放在行标签里,再进行行列转换,是因为列标签里的字段的分类汇总只能显示在字段值组的后面,很乱,所以我先放在行标签里,使用压缩形式或大纲形式的报表布局,在组的顶部显示分类汇总,这样的逻辑更加清晰,更容易看清楚

TA的精华主题

TA的得分主题

发表于 2024-12-10 08:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-12-10 14:42 | 显示全部楼层
VBA实现的,看看能不能符合你的需求:

image.jpg image.jpg

  1. Sub SwapAllRowColumnFields()
  2.     Dim ws As Worksheet
  3.     Dim pt As PivotTable
  4.     Dim pf As PivotField
  5.     Dim rowFieldsList As New Collection
  6.     Dim colFieldsList As New Collection
  7.     Dim pivotName As String
  8.     Dim i As Integer
  9.    
  10.     ' 指定要操作的透视表名称
  11.     pivotName = "数据透视表1"
  12.    
  13.     ' 设置工作表和透视表
  14.     On Error Resume Next
  15.     Set ws = ActiveWorkbook.Worksheets("Sheet1") ' 修改为包含透视表的工作表名称
  16.     Set pt = ws.PivotTables(pivotName)
  17.     On Error GoTo 0
  18.    
  19.     If Not pt Is Nothing Then
  20.         ' 收集所有的行字段和列字段
  21.         For Each pf In pt.RowFields
  22.             rowFieldsList.Add pf.Name
  23.         Next pf
  24.         
  25.         For Each pf In pt.ColumnFields
  26.             colFieldsList.Add pf.Name
  27.         Next pf
  28.         
  29.         ' 移除所有行字段和列字段
  30.         For Each pf In pt.RowFields
  31.             pf.Orientation = xlHidden
  32.         Next pf
  33.         
  34.         For Each pf In pt.ColumnFields
  35.             pf.Orientation = xlHidden
  36.         Next pf
  37.         
  38.         ' 将原来的行字段添加到列字段,原来的列字段添加到行字段
  39.         For i = 1 To rowFieldsList.Count
  40.             pt.PivotFields(rowFieldsList(i)).Orientation = xlColumnField
  41.         Next i
  42.         
  43.         For i = 1 To colFieldsList.Count
  44.             pt.PivotFields(colFieldsList(i)).Orientation = xlRowField
  45.         Next i
  46.         
  47.         ' 提示用户完成操作
  48.         MsgBox "透视表 '" & pt.Name & "' 的所有行列字段已成功互换。", vbInformation
  49.     Else
  50.         MsgBox "未找到名称为 '" & pivotName & "' 的透视表。", vbCritical
  51.     End If
  52. End Sub
复制代码


test.zip

13.16 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2024-12-16 09:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-12-23 15:02 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-24 04:07 , Processed in 0.032373 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表