ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 双重透视

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-17 15:29 | 显示全部楼层
一维转二维9.17.rar (23.03 KB, 下载次数: 12)

应该是这样子了

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-17 16:44 | 显示全部楼层
Qs18 发表于 2024-9-17 14:01
试试。。。。。。。。

谢谢老师!运行成功。一气呵成,无需担忧遗漏了。花后补

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-17 16:45 | 显示全部楼层
lizhipei78 发表于 2024-9-17 08:06
不好意思,已经更正

谢谢老师!运行成功!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-17 16:46 | 显示全部楼层
lizhipei78 发表于 2024-9-17 08:22
弄了两个,一个是删除空的项,一个是保留空的项目

谢谢老师!运行成功!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-17 16:47 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-17 16:50 | 显示全部楼层
quqiyuan 发表于 2024-9-16 23:03
可以全部生成,不过开始没想到那么多嘛,有表头就方便一点,代码短些。。。

谢谢老师!因图片黑色背景,此案列代码又多,看代码眼睛感觉吃力。没有测试,先收藏了!抱歉!

TA的精华主题

TA的得分主题

发表于 2024-9-17 16:54 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ddz79101 发表于 2024-9-17 16:50
谢谢老师!因图片黑色背景,此案列代码又多,看代码眼睛感觉吃力。没有测试,先收藏了!抱歉!

昨天一起发贴失败,但是我今天一大早已经重发了啊!

TA的精华主题

TA的得分主题

发表于 2024-9-17 17:43 | 显示全部楼层
  1. Sub qs()
  2.     ' 关闭警告提示,以便在执行宏时不弹出警告对话框
  3.     Application.DisplayAlerts = False
  4.    
  5.     ' 定义和初始化变量
  6.     Dim arr, i As Long, c As Long, cc As Long, m As Long, rw As Long
  7.     Dim s As String, s2 As String, s3 As String
  8.     Dim dic As Object, d2 As Object, d3 As Object
  9.     Set dic = CreateObject("scripting.dictionary") ' 存储所有数据的字典
  10.     Set d2 = CreateObject("scripting.dictionary") ' 存储每个类别的数据
  11.     Set d3 = CreateObject("scripting.dictionary") ' 存储所有唯一的姓名
  12.    
  13.     ' 从 Sheet4 获取数据区域
  14.     With Sheet4
  15.         arr = .Range("a1").CurrentRegion.Value ' 获取数据区域的值
  16.         
  17.         ' 遍历数据区域的特定列
  18.         For c = 4 To 5
  19.             s = arr(1, c) ' 当前类别
  20.             
  21.             ' 遍历数据区域的每一行
  22.             For i = 2 To UBound(arr)
  23.                 s2 = arr(i, 2) ' 姓名
  24.                 s3 = arr(i, 3) ' 项目
  25.                
  26.                 ' 构建嵌套字典,存储每个人的每个项目的数据
  27.                 If Not dic.Exists(s) Then Set dic(s) = CreateObject("scripting.dictionary")
  28.                 If Not dic(s).Exists(s2) Then Set dic(s)(s2) = CreateObject("scripting.dictionary")
  29.                 dic(s)(s2)(s3) = arr(i, c)
  30.                
  31.                 ' 如果单元格不为空,则记录数据
  32.                 If Not IsEmpty(arr(i, c)) Then
  33.                     If Not d2.Exists(s) Then Set d2(s) = CreateObject("scripting.dictionary")
  34.                     d2(s)(s3) = ""
  35.                 End If
  36.                
  37.                 ' 记录所有唯一的姓名
  38.                 d3(s2) = ""
  39.             Next i
  40.         Next c
  41.         
  42.         ' 初始化汇总数组
  43.         ReDim hrr(1 To 2, 1 To 13)
  44.         hrr(1, 1) = "序号": hrr(1, 2) = "姓名": hrr(1, 13) = "合计"
  45.         cc = 2
  46.         
  47.         ' 构建汇总数据的表头
  48.         For Each dk2 In d2.Keys
  49.             For Each dk3 In d2(dk2).Keys
  50.                 cc = cc + 1
  51.                 hrr(1, cc) = dk2
  52.                 hrr(2, cc) = dk3
  53.             Next
  54.             cc = cc + 1
  55.             hrr(1, cc) = "小计": hrr(2, cc) = "小计"
  56.         Next dk2
  57.         
  58.         ' 根据字典 d3 的计数初始化数组 brr
  59.         rw = d3.Count
  60.         ReDim brr(1 To rw, 1 To UBound(hrr, 2))
  61.         
  62.         ' 填充数组 brr
  63.         m = 0 ' 初始化行计数器
  64.         For Each k In d3.Keys
  65.             m = m + 1
  66.             brr(m, 1) = "'" & m ' 序号
  67.             brr(m, 2) = k ' 姓名
  68.         Next
  69.         
  70.         ' 计算每个人的每个项目的数据
  71.         For i = 1 To m
  72.             For j = 3 To 11
  73.                 If hrr(1, j) <> "小计" Then
  74.                     brr(i, j) = dic(hrr(1, j))(brr(i, 2))(hrr(2, j))
  75.                 End If
  76.             Next
  77.             ' 计算两列的总和
  78.             sm1 = 0: sm2 = 0
  79.             For col = 3 To 7
  80.                 sm1 = sm1 + brr(i, col)
  81.             Next
  82.             For col2 = 9 To 11
  83.                 sm2 = sm2 + brr(i, col2)
  84.             Next
  85.             brr(i, 8) = sm1 ' 第一列总和
  86.             brr(i, 12) = sm2 ' 第二列总和
  87.             brr(i, 13) = sm1 + sm2 ' 合计
  88.         Next i
  89.         
  90.         ' 计算合计
  91.         ReDim Err(1 To 1, 1 To 13)
  92.         Err(1, 2) = "合计"
  93.         For cl = 3 To 13
  94.             Err(1, cl) = Application.WorksheetFunction.Sum(Application.Index(brr, , cl))
  95.         Next
  96.         
  97.         ' 清除旧数据并填充新数据
  98.         .Range("h12").Resize(10000, 13).Clear
  99.         .Range("h12").Resize(2, 13).Value = hrr
  100.         .Range("h14").Resize(m, 13).Value = brr
  101.         .Range("h14").Offset(m).Resize(1, 13).Value = Err
  102.         
  103.         ' 设置边框和对齐方式
  104.         With .Range("h12").CurrentRegion
  105.             .Borders.LineStyle = 1
  106.             .HorizontalAlignment = xlCenter
  107.             .VerticalAlignment = xlCenter
  108.             .NumberFormat = "0.00"
  109.         End With
  110.         
  111.         ' 合并单元格
  112.         .Range("h12:h13").Merge
  113.         .Range("i12:i13").Merge
  114.         .Range("t12:t13").Merge
  115.         .Range("j12:o12").Merge
  116.         .Range("p12:s12").Merge
  117.     End With
  118.    
  119.     ' 清理对象
  120.     Set dic = Nothing: Set d2 = Nothing: Set d3 = Nothing
  121.     ' 恢复警告提示
  122.     Application.DisplayAlerts = True
  123. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-18 14:46 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-9-19 12:51 | 显示全部楼层
WPS里的JSA练习一下——


微信截图_20240919124404.png

微信截图_20240919124938.png


240918_二重透视表.rar

17.2 KB, 下载次数: 4

用WPS打开并启用宏

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-15 18:22 , Processed in 0.025333 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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