ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 EH云课堂直播课程免费学 打造核心竞争力的职场宝典
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 808|回复: 25

[求助] 求教多条件、多字段分类汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-12 15:33 | 显示全部楼层 |阅读模式

求助各位高手:

有张成本表,约有3000行,现需对该表的不同条件,多个字段进行分类汇总。

考虑到品牌、客户、生产工厂等个数的不固定性,以及会在报表统计人员不知情的情况下增加,故请高手使用VBA方法以达到分类汇总的目的。

附件中将多种汇总样式放在一张“汇总表”内了,高手可根据自已的喜好,将汇总反映在一张表上或多张表上。

本想参照论坛上高手的方法自已做的,可昨天忙活了一下午,都没能搞定。故现求教各位。

辛苦各位了,谢谢赐教!
成本表.rar (31.85 KB, 下载次数: 27)

TA的精华主题

TA的得分主题

发表于 2019-1-12 17:17 | 显示全部楼层
用数据表透视表可以实现,美中不足的是按月汇总后,品牌计数不能求和。

成本表.rar

97.17 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2019-1-12 19:26 | 显示全部楼层
'汇总了后面几个小表,第一个按月汇总表未处理,方法同小表自己修改一下,,,

Option Explicit

Sub test()
  Dim arr, i, j, k, m, pos1, pos2, sum, total
  pos1 = Array(3, 4, 5, 6, 8)
  pos2 = Array(0, 0, 9, 11, 15, 16, 17)
  arr = Sheets("原登记表").[a1].CurrentRegion.Offset(2)
  ReDim brr(1 To UBound(arr, 1), 1 To 6), sum(2 To UBound(brr, 2))
  With Sheets("汇总表").[j3]
    .Resize(UBound(brr, 1), (UBound(brr, 2) + 1) * (UBound(pos1) + 2)).ClearContents
    For i = 0 To UBound(pos1)
      m = 0: total = sum
      Call qsort(arr, 1, UBound(arr, 1) - 2, 1, UBound(arr, 2), pos1(i))
      For j = 1 To UBound(arr, 1) - 2
        For k = 2 To UBound(brr, 2): sum(k) = sum(k) + arr(j, pos2(k)): Next
        If arr(j, pos1(i)) <> arr(j + 1, pos1(i)) Then
          m = m + 1: brr(m, 1) = arr(j, pos1(i))
          For k = 2 To UBound(brr, 2)
            brr(m, k) = sum(k)
            total(k) = total(k) + sum(k)
          Next
          ReDim sum(2 To UBound(brr, 2))
        End If
      Next
      m = m + 1: brr(m, 1) = "总计"
      For j = 2 To UBound(brr, 2): brr(m, j) = total(j): Next
      .Offset(, i * UBound(brr, 2) + i).Resize(m, UBound(brr, 2)) = brr
    Next
  End With
End Sub

Function qsort(arr, first, last, left, right, key)
  Dim i As Long, j As Long, k As Long, x, t
  i = first: j = last: x = arr((first + last) / 2, key)
  While i <= j
    While arr(i, key) < x: i = i + 1: Wend
    While x < arr(j, key): j = j - 1: Wend
    If i <= j Then
      For k = left To right
        t = arr(i, k): arr(i, k) = arr(j, k): arr(j, k) = t
      Next
      i = i + 1: j = j - 1
    End If
  Wend
  If first < j Then Call qsort(arr, first, j, left, right, key)
  If i < last Then Call qsort(arr, i, last, left, right, key)
End Function

评分

参与人数 2鲜花 +4 收起 理由
ezjahz + 2 感谢帮助
jjmysjg + 2 太强大了

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-12 20:29 | 显示全部楼层
一把小刀闯天下 发表于 2019-1-12 19:26
'汇总了后面几个小表,第一个按月汇总表未处理,方法同小表自己修改一下,,,

Option Explicit

谢谢,留下记号

TA的精华主题

TA的得分主题

发表于 2019-1-12 20:56 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-14 08:23 | 显示全部楼层
719404338 发表于 2019-1-12 17:17
用数据表透视表可以实现,美中不足的是按月汇总后,品牌计数不能求和。

早上好!
      谢谢赐教!我学习消化一下。谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-14 08:31 | 显示全部楼层
一把小刀闯天下 发表于 2019-1-12 19:26
'汇总了后面几个小表,第一个按月汇总表未处理,方法同小表自己修改一下,,,

Option Explicit

早上好!
      谢谢赐教。
      我想请老师把您的代码注释一下,以便我偿试按老师的代码改做按月汇总表。
      再次感谢!

TA的精华主题

TA的得分主题

发表于 2019-1-14 11:34 | 显示全部楼层
ezjahz 发表于 2019-1-14 08:31
早上好!
      谢谢赐教。
      我想请老师把您的代码注释一下,以便我偿试按老师的代码改做按月汇总 ...

最好自行学习, 实在有看不懂的地方, 可以单独拿出来再问的, 加油!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-14 12:27 | 显示全部楼层
tyxvba7529 发表于 2019-1-14 11:34
最好自行学习, 实在有看不懂的地方, 可以单独拿出来再问的, 加油!

谢谢老师热心回复。
我想知道代码的含义再做。
另外按列统计出现次数的VBA语句怎么写?
请指教。谢谢!

TA的精华主题

TA的得分主题

发表于 2019-1-14 13:24 | 显示全部楼层
ezjahz 发表于 2019-1-14 12:27
谢谢老师热心回复。
我想知道代码的含义再做。
另外按列统计出现次数的VBA语句怎么写?

客气, 我不是老师, 也是在学习;
按列统计出现次数有很多方法, 我比较喜欢用sql的方法,用字典...等也是常用的。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

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

GMT+8, 2019-10-20 19:06 , Processed in 0.072135 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

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

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

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