Excel精英培训网

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

[已解决]求助:将sheet1到sheet7的数据,统计到sheet8中

[复制链接]
发表于 2012-10-10 17:30 | 显示全部楼层 |阅读模式
将sheet1到sheet7的数据,统计到sheet8中。

将sheet1到sheet7的第一列、第三列(与统计表的第一列、第二列一一对应)对应的SF数量

Sheet1到Sheet7的表,有可能数据为空(只有第一行)

附件提供几十条数据,实际有10几万个数据,谢谢!

工作表数据和.rar (15.14 KB, 下载次数: 21)
 楼主| 发表于 2012-10-10 17:43 | 显示全部楼层

求助:将sheet1到sheet7的数据,统计到sheet8中

将sheet1到sheet7的数据,统计到sheet8中。

将sheet1到sheet7的第一列、第三列(与统计表的第一列、第二列一一对应)对应的SF数量

Sheet1到Sheet7的表,有可能数据为空(只有第一行)

附件提供几十条数据,实际有10几万个数据,谢谢!


回复

使用道具 举报

发表于 2012-10-10 17:47 | 显示全部楼层
是累加嘛?
还是复制前要去清除统计表中的数据?
回复

使用道具 举报

发表于 2012-10-10 18:28 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-10-10 18:30 编辑
  1. Sub 合并数据()
  2.     Dim arr, arrRst, str$, arr2
  3.     Dim i&
  4.     Dim wsh As Worksheet
  5.     Dim dic As Object
  6.     Set dic = CreateObject("scripting.dictionary")
  7.    
  8.     For Each wsh In Worksheets
  9.         If wsh.Name Like "*[1-9]" Then
  10.             With wsh
  11.                 arr = .Range("a1").Resize(.[a1].End(xlDown).Row, 4)
  12.             End With
  13.             Debug.Print wsh.Name & "Ubound:" & UBound(arr)
  14.             For i = 2 To UBound(arr)
  15.                 dic(arr(i, 1) & "|" & arr(i, 3)) = Val(dic(arr(i, 1) & "|" & arr(i, 3))) + Val(arr(i, 4))
  16.             Next
  17.         End If
  18.     Next
  19.     arr = dic.keys
  20.     ReDim arrRst(1 To dic.Count + 1, 1 To 3)
  21.     For i = 2 To UBound(arrRst)
  22.         arr2 = Split(arr(i - 2), "|")
  23.         arrRst(i, 1) = arr2(0)
  24.         arrRst(i, 2) = arr2(1)
  25.         arrRst(i, 3) = dic(arr(i - 2))
  26.         Debug.Print dic(arr(i - 2))
  27.     Next
  28.     arrRst(1, 1) = "Elem"
  29.     arrRst(1, 2) = "DIP"
  30.     arrRst(1, 3) = "SF"
  31.     Worksheets("统计").Range("a1").Resize(dic.Count + 1, 3) = arrRst
  32. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-10 18:28 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-10-11 15:21 编辑
  1. Sub 合并数据()
  2.     Dim arr, arrRst, str$, arr2
  3.     Dim i&
  4.     Dim wsh As Worksheet
  5.     Dim dic As Object
  6.     Set dic = CreateObject("scripting.dictionary")
  7.    
  8.     For Each wsh In Worksheets
  9.         If wsh.Name Like "*[1-9]" Then
  10.             With wsh
  11.                 arr = .Range("a1").Resize(.[a1].End(xlDown).Row, 4)
  12.             End With
  13.             For i = 2 To UBound(arr)
  14.                 dic(arr(i, 1) & "|" & arr(i, 3)) = Val(dic(arr(i, 1) & "|" & arr(i, 3))) + Val(arr(i, 4))
  15.             Next
  16.         End If
  17.     Next
  18.     arr = dic.keys
  19.     ReDim arrRst(1 To dic.Count + 1, 1 To 3)
  20.     For i = 2 To UBound(arrRst)
  21.         arr2 = Split(arr(i - 2), "|")
  22.         arrRst(i, 1) = arr2(0)
  23.         arrRst(i, 2) = arr2(1)
  24.         arrRst(i, 3) = dic(arr(i - 2))
  25.     Next
  26.     arrRst(1, 1) = "Elem"
  27.     arrRst(1, 2) = "DIP"
  28.     arrRst(1, 3) = "SF"
  29.     Worksheets("统计").Range("a1").Resize(dic.Count + 1, 3) = arrRst
  30. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-10 18:34 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-10-10 18:40 编辑
  1. Sub 合并数据2()
  2.     Dim arr, arrRst, arr2
  3.     Dim i&, t!
  4.     Dim wsh As Worksheet
  5.     Dim dic As Object
  6.     t = Timer
  7.     Application.ScreenUpdating = False
  8.     Set dic = CreateObject("scripting.dictionary")
  9.    
  10.     For Each wsh In Worksheets
  11.         If wsh.Name Like "*[1-9]" Then
  12.             With wsh
  13.                 If .[a1] = "" Then GoTo goout
  14.                 arr = .Range("a1").Resize(.[a1].End(xlDown).Row, 4)
  15.             End With
  16.             For i = 2 To UBound(arr)
  17.                 dic(arr(i, 1) & "|" & arr(i, 3)) = Val(dic(arr(i, 1) & "|" & arr(i, 3))) + Val(arr(i, 4))
  18.             Next
  19.         End If
  20. goout:    Next
  21.     arr = dic.keys
  22.     ReDim arrRst(1 To dic.Count + 1, 1 To 3)
  23.     For i = 2 To UBound(arrRst)
  24.         arr2 = Split(arr(i - 2), "|")
  25.         arrRst(i, 1) = arr2(0)
  26.         arrRst(i, 2) = arr2(1)
  27.         arrRst(i, 3) = dic(arr(i - 2))
  28.         Debug.Print dic(arr(i - 2))
  29.     Next
  30.     arr3 = Array("Elem", "DIP", "SF")
  31.     For i = 0 To UBound(arr3)
  32.         arrRst(1, i + 1) = arr3(i)
  33.     Next
  34.     Worksheets("统计").Range("a1").Resize(dic.Count + 1, 3) = arrRst
  35.     Application.CutCopyMode = False
  36.     Debug.Print Timer - t
  37. End Sub
复制代码
回复

使用道具 举报

发表于 2012-10-10 18:35 | 显示全部楼层    本楼为最佳答案   
本帖最后由 hwc2ycy 于 2012-10-10 18:40 编辑
  1. Sub 合并数据2()
  2.     Dim arr, arrRst, arr2
  3.     Dim i&, t!
  4.     Dim wsh As Worksheet
  5.     Dim dic As Object
  6.     t = Timer
  7.     Application.ScreenUpdating = False
  8.     Set dic = CreateObject("scripting.dictionary")
  9.    
  10.     For Each wsh In Worksheets
  11.         If wsh.Name Like "*[1-9]" Then
  12.             With wsh
  13.                 If .[a1] = "" Then GoTo goout
  14.                 arr = .Range("a1").Resize(.[a1].End(xlDown).Row, 4)
  15.             End With
  16.             For i = 2 To UBound(arr)
  17.                 dic(arr(i, 1) & "|" & arr(i, 3)) = Val(dic(arr(i, 1) & "|" & arr(i, 3))) + Val(arr(i, 4))
  18.             Next
  19.         End If
  20. goout:    Next
  21.     arr = dic.keys
  22.     ReDim arrRst(1 To dic.Count + 1, 1 To 3)
  23.     For i = 2 To UBound(arrRst)
  24.         arr2 = Split(arr(i - 2), "|")
  25.         arrRst(i, 1) = arr2(0)
  26.         arrRst(i, 2) = arr2(1)
  27.         arrRst(i, 3) = dic(arr(i - 2))
  28.         Debug.Print dic(arr(i - 2))
  29.     Next
  30.     arr3 = Array("Elem", "DIP", "SF")
  31.     For i = 0 To UBound(arr3)
  32.         arrRst(1, i + 1) = arr3(i)
  33.     Next
  34.     Worksheets("统计").Range("a1").Resize(dic.Count + 1, 3) = arrRst
  35.     Application.CutCopyMode = False
  36.     Debug.Print Timer - t
  37. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-10-10 18:55 | 显示全部楼层
hwc2ycy 发表于 2012-10-10 18:35

是的,累加,谢谢亲
回复

使用道具 举报

发表于 2012-10-10 19:01 | 显示全部楼层
maysh2009 发表于 2012-10-10 18:55
是的,累加,谢谢亲

亲,用最后我发的代码试试吧。
回复

使用道具 举报

 楼主| 发表于 2012-10-10 20:22 | 显示全部楼层
hwc2ycy 发表于 2012-10-10 19:01
亲,用最后我发的代码试试吧。

谢谢,我想问 这个如果使用字典实现的话,如果有多少列数据就要采用多少个字典?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 18:53 , Processed in 0.857905 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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