Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3032|回复: 8

[已解决]分类汇总的一些问题

[复制链接]
发表于 2014-6-18 10:51 | 显示全部楼层 |阅读模式
先行谢过了!
1、如何把表1转换成表2的形式
2、表2中,“钢材”如何按照“型号规格”对“金额”进行分类汇总
3、表2中,如何按“购进月份”对“金额”分类汇总

附件.rar (22.74 KB, 下载次数: 12)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-6-18 11:15 | 显示全部楼层
分类汇总要求表格不能有合并单元格,表1并不适合,包括数据透视表
可以通过公式或vba来做
回复

使用道具 举报

发表于 2014-6-18 11:30 | 显示全部楼层
格式可以如下变更,
在表1的sheet2工作表输入以下公式;
A2=INDEX(Sheet1!A:A,(INT((ROW()-2)/4))+4)
B2="2014年"&MOD(ROW()-2,4)+2&"月"
C2=OFFSET(Sheet1!$A$3,INT((ROW()-2)/4)+1,(MOD(ROW()-2,4)+2)*2+1,)
D2=OFFSET(Sheet1!$A$3,INT((ROW()-2)/4)+1,(MOD(ROW()-2,4)+2)*2+2,)

公式下拉。
回复

使用道具 举报

 楼主| 发表于 2014-6-18 11:32 | 显示全部楼层
tgydslr 发表于 2014-6-18 11:15
分类汇总要求表格不能有合并单元格,表1并不适合,包括数据透视表
可以通过公式或vba来做

没说表1要分类汇总啊,我问的是表2该怎么做分类汇总……
回复

使用道具 举报

 楼主| 发表于 2014-6-18 11:42 | 显示全部楼层
baksy 发表于 2014-6-18 11:30
格式可以如下变更,
在表1的sheet2工作表输入以下公式;
A2=INDEX(Sheet1!A:A,(INT((ROW()-2)/4))+4)

{:1112:}
回复

使用道具 举报

发表于 2014-6-18 11:58 | 显示全部楼层
当年一役 发表于 2014-6-18 11:32
没说表1要分类汇总啊,我问的是表2该怎么做分类汇总……

分类汇总?
回复

使用道具 举报

发表于 2014-6-18 13:26 | 显示全部楼层
表1 生成 表2 样式的代码:
  1. Sub 生成竖表()
  2.     arr = Sheet1.[a1].CurrentRegion
  3.     ReDim brr(1 To UBound(arr) * UBound(arr, 2), 1 To 7)
  4.     For i = 4 To UBound(arr) - 1
  5.         gg = arr(i, 1): dw = arr(i, 3)
  6.         For j = 4 To UBound(arr, 2) - 3 Step 2
  7.             rq = arr(2, j)
  8.             If arr(i, j) > 0 Then
  9.                 n = n + 1
  10.                 brr(n, 1) = "钢材": brr(n, 2) = gg: brr(n, 3) = rq
  11.                 brr(n, 4) = dw: brr(n, 5) = arr(i, j): brr(n, 6) = arr(i, j + 1)
  12.             End If
  13.         Next
  14.     Next
  15.     Sheet2.[a2].Resize(n, 7) = brr
  16.     Sheet2.Activate
  17. End Sub
复制代码
回复

使用道具 举报

发表于 2014-6-18 13:26 | 显示全部楼层
两个分类汇总的代码
  1. Sub 钢材按规格分类汇总()
  2.     arr = [a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     For i = 2 To UBound(arr)
  5.         If arr(i, 1) = "钢材" Then
  6.             d(arr(i, 2)) = d(arr(i, 2)) + arr(i, 6)
  7.         End If
  8.     Next
  9.     [i:j].ClearContents
  10.     [i1].Resize(1, 2) = Array("钢材规格", "金额")
  11.     [i2].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items))
  12. End Sub

  13. Sub 按购进月份分类汇总()
  14.     arr = [a1].CurrentRegion
  15.     Set d = CreateObject("scripting.dictionary")
  16.     For i = 2 To UBound(arr)
  17.             d(arr(i, 3)) = d(arr(i, 3)) + arr(i, 6)
  18.     Next
  19.     [i:j].ClearContents
  20.     [i1].Resize(1, 2) = Array("购进月份", "金额")
  21.     [i2].Resize(d.Count, 2) = Application.Transpose(Array(d.keys, d.items))
  22. End Sub
复制代码
回复

使用道具 举报

发表于 2014-6-18 13:27 | 显示全部楼层    本楼为最佳答案   
为方便计,全部做在表1里。请看附件。

表1.rar

32.69 KB, 下载次数: 13

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 20:12 , Processed in 0.306807 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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