Excel精英培训网

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

[已解决]如何提取不重复的客户销售汇总

[复制链接]
发表于 2015-12-13 20:45 | 显示全部楼层 |阅读模式
根据销售明细,如何在另一个工作表提取不重复客户的销售数据
最佳答案
2015-12-14 00:21
本帖最后由 sry660 于 2015-12-14 00:28 编辑
  1. Sub 提取不重复值并汇总()
  2. Dim arr
  3. Sheets(1).Activate
  4. arr = [a1].CurrentRegion

  5. Dim d, d1, x$, y$, i&
  6. Set d = CreateObject("scripting.dictionary")
  7. Set d1 = CreateObject("scripting.dictionary")
  8. For i = 2 To UBound(arr)
  9.     x = arr(i, 1): y = arr(i, 2)
  10.     d1(x) = ""
  11.     If Not d.exists(x) Then Set d(x) = CreateObject("scripting.dictionary")
  12.     d(x)(y) = d(x)(y) + arr(i, 3)
  13. Next
  14. Sheets(2).[a:h].ClearContents
  15. Sheets(2).[a1].Resize(1, 4) = Array("客户", "百事", "可口", "芬达")
  16. Sheets(2).[a2].Resize(d1.Count, 1) = Application.Transpose(d1.keys)

  17. Dim brr, j&, k&
  18. brr = Sheets(2).[a1].CurrentRegion
  19. For j = 2 To UBound(brr)
  20.     For k = 2 To UBound(brr, 2)
  21.         If d(brr(j, 1)).exists(brr(1, k)) Then
  22.             brr(j, k) = d(brr(j, 1))(brr(1, k))
  23.         Else
  24.             brr(j, k) = 0
  25.         End If
  26.     Next k
  27. Next j

  28. Sheets(2).[a1].CurrentRegion = brr
  29. Set d = Nothing
  30. Set d1 = Nothing
  31. Erase arr, brr
  32. Sheets(2).Select
  33. [a:d].EntireColumn.AutoFit

  34. End Sub
复制代码

销售数据.rar

8.25 KB, 下载次数: 10

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-12-13 21:01 | 显示全部楼层
附件

销售数据.zip

8.83 KB, 下载次数: 16

回复

使用道具 举报

发表于 2015-12-13 21:17 | 显示全部楼层
销售数据.zip (8.62 KB, 下载次数: 8)
回复

使用道具 举报

 楼主| 发表于 2015-12-13 21:46 | 显示全部楼层
baksy 发表于 2015-12-13 21:01
附件

要是sheet1中的客户数量增加怎么办


回复

使用道具 举报

发表于 2015-12-14 00:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 sry660 于 2015-12-14 00:28 编辑
  1. Sub 提取不重复值并汇总()
  2. Dim arr
  3. Sheets(1).Activate
  4. arr = [a1].CurrentRegion

  5. Dim d, d1, x$, y$, i&
  6. Set d = CreateObject("scripting.dictionary")
  7. Set d1 = CreateObject("scripting.dictionary")
  8. For i = 2 To UBound(arr)
  9.     x = arr(i, 1): y = arr(i, 2)
  10.     d1(x) = ""
  11.     If Not d.exists(x) Then Set d(x) = CreateObject("scripting.dictionary")
  12.     d(x)(y) = d(x)(y) + arr(i, 3)
  13. Next
  14. Sheets(2).[a:h].ClearContents
  15. Sheets(2).[a1].Resize(1, 4) = Array("客户", "百事", "可口", "芬达")
  16. Sheets(2).[a2].Resize(d1.Count, 1) = Application.Transpose(d1.keys)

  17. Dim brr, j&, k&
  18. brr = Sheets(2).[a1].CurrentRegion
  19. For j = 2 To UBound(brr)
  20.     For k = 2 To UBound(brr, 2)
  21.         If d(brr(j, 1)).exists(brr(1, k)) Then
  22.             brr(j, k) = d(brr(j, 1))(brr(1, k))
  23.         Else
  24.             brr(j, k) = 0
  25.         End If
  26.     Next k
  27. Next j

  28. Sheets(2).[a1].CurrentRegion = brr
  29. Set d = Nothing
  30. Set d1 = Nothing
  31. Erase arr, brr
  32. Sheets(2).Select
  33. [a:d].EntireColumn.AutoFit

  34. End Sub
复制代码

销售数据.rar

14.56 KB, 下载次数: 9

回复

使用道具 举报

发表于 2015-12-14 06:53 | 显示全部楼层
zxmaction 发表于 2015-12-13 21:46
要是sheet1中的客户数量增加怎么办

调整公式中的取值范围33即可。
回复

使用道具 举报

 楼主| 发表于 2015-12-14 09:39 | 显示全部楼层
baksy 发表于 2015-12-14 06:53
调整公式中的取值范围33即可。

还是不行,怎么回事?

回复

使用道具 举报

 楼主| 发表于 2015-12-14 09:40 | 显示全部楼层
sry660 发表于 2015-12-14 00:21

真好用!但是不懂
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 15:42 , Processed in 0.264636 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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