Excel精英培训网

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

[已解决]多条件汇总(删除重复项和汇总为零的行)

[复制链接]
发表于 2013-7-10 09:03 | 显示全部楼层 |阅读模式
10学分
实际工作中一份表有数千行(记录每天增减的数量),需要进行多条件汇总。
请高手帮忙用VBA帮忙解决。 库存宏表.zip (12.42 KB, 下载次数: 20)

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-7-10 09:33 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2013-7-10 10:02 | 显示全部楼层
妞叫七七 发表于 2013-7-10 09:33
你这个用数据透视表比较简单

没用过数据透视表呵。
不知数据透视表的运行速度如何,上万行的表。
回复

使用道具 举报

发表于 2013-7-10 10:59 | 显示全部楼层    本楼为最佳答案   
  1. Sub 汇总()
  2. Dim d As Object, i%, j%, arr, brr, crr, row1&
  3. Set d = CreateObject("scripting.dictionary")      

  4. row1 = Sheet1.Range("b65536").End(3).Row      
  5. j = 1

  6. arr = Sheet1.Range("c2:g" & row1)

  7. For i = 1 To UBound(arr)
  8.       If Not d.exists(arr(i, 1) & "," & arr(i, 2)) Then   
  9.              d.Add arr(i, 1) & "," & arr(i, 2), arr(i, 5)               
  10.       Else
  11.              d(arr(i, 1) & "," & arr(i, 2)) = d(arr(i, 1) & "," & arr(i, 2)) + arr(i, 5)
  12.       End If
  13. Next

  14. brr = d.keys
  15. crr = d.items

  16. ReDim drr(1 To d.Count, 1 To 3)

  17. For i = 0 To UBound(brr)
  18.       If crr(i) <> 0 Then
  19.           drr(j, 1) = Split(brr(i), ",")(0)
  20.           drr(j, 2) = Split(brr(i), ",")(1)
  21.           drr(j, 3) = crr(i)
  22.           j = j + 1
  23.      End If
  24. Next

  25. Sheet2.Range("a2").Resize(d.Count, 3) = drr

  26. Set d = Nothing

  27. End Sub
复制代码

库存宏表.rar

18.73 KB, 下载次数: 24

回复

使用道具 举报

 楼主| 发表于 2013-7-10 15:03 | 显示全部楼层
谢谢4楼层主,试用很好。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 14:51 , Processed in 0.314129 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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