Excel精英培训网

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

[已解决]数据汇总

[复制链接]
发表于 2016-4-8 14:05 | 显示全部楼层 |阅读模式
求助!根据数据源自动汇总数据到结果表中,详见附件。
有劳各位。
最佳答案
2016-4-8 14:51
  1. Sub 汇总()
  2.     arr = Sheets("数据源").[a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     ReDim brr(1 To UBound(arr), 1 To 5)
  5.     For i = 2 To UBound(arr)
  6.         x = arr(i, 2) & arr(i, 3)
  7.         If Not d.exists(x) Then
  8.             n = n + 1
  9.             d(x) = n
  10.             For j = 1 To 5
  11.                 brr(n, j) = arr(i, j)
  12.             Next
  13.         End If
  14.         y = x & arr(i, 6)
  15.         d(y) = d(y) + arr(i, 7)
  16.     Next
  17.     With Sheet1
  18.         .[b2].Resize(n, 5) = brr
  19.         crr = .[a1].CurrentRegion
  20.         For i = 2 To UBound(crr)
  21.             x = crr(i, 3) & crr(i, 4)
  22.             For j = 7 To UBound(crr, 2)
  23.                 y = x & crr(1, j)
  24.                 crr(i, j) = d(y)
  25.             Next
  26.         Next
  27.         .[a1].CurrentRegion = crr
  28.         .[b2].Resize(n, j).Sort key1:=.[f2], key2:=.[e2]     '按生产状态及日期排序
  29.     End With
  30. End Sub
复制代码

数据汇总请教.rar

52.21 KB, 下载次数: 15

发表于 2016-4-8 14:51 | 显示全部楼层    本楼为最佳答案   
  1. Sub 汇总()
  2.     arr = Sheets("数据源").[a1].CurrentRegion
  3.     Set d = CreateObject("scripting.dictionary")
  4.     ReDim brr(1 To UBound(arr), 1 To 5)
  5.     For i = 2 To UBound(arr)
  6.         x = arr(i, 2) & arr(i, 3)
  7.         If Not d.exists(x) Then
  8.             n = n + 1
  9.             d(x) = n
  10.             For j = 1 To 5
  11.                 brr(n, j) = arr(i, j)
  12.             Next
  13.         End If
  14.         y = x & arr(i, 6)
  15.         d(y) = d(y) + arr(i, 7)
  16.     Next
  17.     With Sheet1
  18.         .[b2].Resize(n, 5) = brr
  19.         crr = .[a1].CurrentRegion
  20.         For i = 2 To UBound(crr)
  21.             x = crr(i, 3) & crr(i, 4)
  22.             For j = 7 To UBound(crr, 2)
  23.                 y = x & crr(1, j)
  24.                 crr(i, j) = d(y)
  25.             Next
  26.         Next
  27.         .[a1].CurrentRegion = crr
  28.         .[b2].Resize(n, j).Sort key1:=.[f2], key2:=.[e2]     '按生产状态及日期排序
  29.     End With
  30. End Sub
复制代码

数据汇总请教.rar

57.27 KB, 下载次数: 13

评分

参与人数 1 +1 收起 理由
misluo + 1 我和小伙伴都惊呆了

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-4-8 15:41 | 显示全部楼层
谢谢回复。排序是按照拼音,如果这样排序了?补料
生产中
生产中
全制程
暂缓
暂缓


回复

使用道具 举报

 楼主| 发表于 2016-4-8 15:42 | 显示全部楼层
生产中(S)
全制程(Q)
回复

使用道具 举报

发表于 2016-4-8 16:27 | 显示全部楼层
  1. Sub Macro1()
  2. Dim arr, brr, crr, w, d, d2, i%, j&
  3. Set d = CreateObject("scripting.dictionary")
  4. Set d2 = CreateObject("scripting.dictionary")
  5. With Sheets("数据源")
  6.     arr = .[a1].CurrentRegion
  7.     .[a1].CurrentRegion.Sort .[d2]
  8.     brr = .[a1].CurrentRegion
  9.     .[a1].CurrentRegion = arr
  10. End With
  11. ReDim crr(1 To UBound(brr), 1 To 12)
  12. w = Array("补料", "生产中", "暂缓")
  13. For Each c In [g1:l1]
  14.     d(c.Value) = c.Column
  15. Next
  16. For i = 0 To UBound(w)
  17.     For j = 2 To UBound(brr)
  18.         If w(i) = brr(j, 5) Then
  19.             zf = brr(j, 1) & "," & brr(j, 2) & "," & brr(j, 3)
  20.             n = d(brr(j, 6))
  21.             If Not d2.exists(zf) Then
  22.                 s = s + 1
  23.                 d2(zf) = s
  24.                 crr(s, 1) = s
  25.                 crr(s, 2) = brr(j, 1)
  26.                 crr(s, 3) = brr(j, 2)
  27.                 crr(s, 4) = brr(j, 3)
  28.                 crr(s, 5) = brr(j, 4)
  29.                 crr(s, 6) = brr(j, 5)
  30.                 crr(s, n) = brr(j, 7)
  31.             Else
  32.                 s2 = d2(zf)
  33.                 crr(s2, n) = crr(s2, n) + brr(j, 7)
  34.             End If
  35.         End If
  36.     Next
  37. Next
  38. Range("a2").Resize(s, UBound(crr, 2)) = crr
  39. End Sub
复制代码

数据汇总请教.rar

44.05 KB, 下载次数: 22

评分

参与人数 1 +1 收起 理由
misluo + 1 很给力

查看全部评分

回复

使用道具 举报

发表于 2016-4-9 09:38 | 显示全部楼层
好羡慕这些高手。
回复

使用道具 举报

 楼主| 发表于 2016-4-9 13:45 | 显示全部楼层
dsmch 发表于 2016-4-8 16:27

TO dsmch大神,
      如果数据源只有一行的时候,程式会报错,请您再看看。
     

点评

第一句增加纠错处理:On Error Resume Next  发表于 2016-4-9 13:49
回复

使用道具 举报

 楼主| 发表于 2016-4-9 14:55 | 显示全部楼层
misluo 发表于 2016-4-9 13:45
TO dsmch大神,
      如果数据源只有一行的时候,程式会报错,请您再看看。

改变数据源数据后,程序跑出来数据也有些问题。麻烦您再看下

数据汇总请教.rar

39.47 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2016-4-9 14:59 | 显示全部楼层
misluo 发表于 2016-4-9 13:45
TO dsmch大神,
      如果数据源只有一行的时候,程式会报错,请您再看看。

附件有问题,重新发!

数据汇总请教.rar

39.47 KB, 下载次数: 3

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 18:03 , Processed in 0.455959 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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