Excel精英培训网

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

[已解决]VBA统计同一公司、同一药品的进货数据与销售数量

[复制链接]
发表于 2014-10-30 10:57 | 显示全部楼层 |阅读模式
VBA统计同一公司、同一药品的进货数据与销售数量

如附件中的 模拟数据

请老师们帮帮忙,谢谢老师们了!
VBA统计同一公司、同一药品的进货数据与销售数量.rar (23.89 KB, 下载次数: 36)
发表于 2014-10-30 11:17 | 显示全部楼层
用数透表应该是很方便的了。

或者

改用SQL来实现。
回复

使用道具 举报

发表于 2014-10-30 11:19 | 显示全部楼层
你的效果实际上就是分类汇总能实用了。何必再用VBA呢。
回复

使用道具 举报

 楼主| 发表于 2014-10-30 11:35 | 显示全部楼层
hwc2ycy 发表于 2014-10-30 11:19
你的效果实际上就是分类汇总能实用了。何必再用VBA呢。

老师,可以帮我录个动画吗,谢谢了老师了!
回复

使用道具 举报

 楼主| 发表于 2014-10-30 11:49 | 显示全部楼层
hwc2ycy 发表于 2014-10-30 11:17
用数透表应该是很方便的了。

或者

老师你好,能帮我录制个数据透视表的动画吗,谢谢老师了!
回复

使用道具 举报

发表于 2014-10-30 12:03 | 显示全部楼层    本楼为最佳答案   
  1. Sub demo()
  2.     Dim d As Object
  3.     Dim arr, result(), temp(1 To 1024, 1 To 3), temp2
  4.     Dim dKeys, dItems
  5.     Dim i&, j&, lPos&, str$, lPos1&, strRow$, k&
  6.    
  7.     arr = Worksheets("数据源").Range("a1").CurrentRegion.Value
  8.    
  9.     Set d = CreateObject("scripting.dictionary")
  10.     For i = 2 To UBound(arr)
  11.         str = arr(i, 3) & "#" & arr(i, 4)
  12.         If d.exists(str) Then
  13.             lPos1 = d(str)
  14.         Else
  15.             lPos = lPos + 1
  16.             d(str) = lPos
  17.             lPos1 = lPos
  18.         End If
  19.         temp(lPos1, 2) = temp(lPos1, 2) + arr(i, 5)
  20.         temp(lPos1, 3) = temp(lPos1, 3) + arr(i, 11)
  21.         temp(lPos1, 1) = temp(lPos1, 1) & i & ","
  22.     Next
  23.    
  24.     ReDim result(1 To UBound(arr) + 1 + d.Count, 1 To UBound(arr, 2))
  25.     dKeys = d.keys: dItems = d.items
  26.     lPos = 2
  27.     For k = LBound(arr, 2) To UBound(arr, 2)
  28.         result(1, k) = arr(1, k)
  29.     Next
  30.     Application.ScreenUpdating = False
  31.     Sheet1.UsedRange.Clear
  32.     For i = LBound(dKeys) To UBound(dKeys)
  33.         temp2 = Split(temp(i + 1, 1), ",")
  34.         For j = LBound(temp2) To UBound(temp2) - 1
  35.             lPos1 = temp2(j)
  36.             For k = LBound(arr, 2) To UBound(arr, 2)
  37.                 result(lPos, k) = arr(lPos1, k)
  38.             Next
  39.             lPos = lPos + 1
  40.         Next

  41.         result(lPos, 3) = result(lPos - 1, 3)
  42.         result(lPos, 4) = result(lPos - 1, 4)
  43.         result(lPos, 5) = temp(i + 1, 2)
  44.         result(lPos, 11) = temp(i + 1, 3)
  45.         With Sheet1.Rows(lPos)
  46.             .Font.Bold = True
  47.             .Font.Color = vbRed
  48.         End With
  49.         lPos = lPos + 1
  50.     Next
  51.     With Sheet1
  52.         .Range("a1").Resize(lPos, 11).Value = result
  53.     End With
  54.     Application.ScreenUpdating = True
  55.     MsgBox "统计完成"
  56. End Sub
复制代码

评分

参与人数 1 +9 收起 理由
yjwdjfqb + 9 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-10-30 12:04 | 显示全部楼层
好久没写了,代码有点复杂,其实先排好序,效率应该会更高。
回复

使用道具 举报

 楼主| 发表于 2014-10-30 12:24 | 显示全部楼层
hwc2ycy 发表于 2014-10-30 11:19
你的效果实际上就是分类汇总能实用了。何必再用VBA呢。

老师你好,能帮我录制个数据透视的动画吗,想学习下数据透视的方法,谢谢老师了!
回复

使用道具 举报

 楼主| 发表于 2014-10-30 13:15 | 显示全部楼层
请老师们用数据透视的方法做这个附件,帮我做个数据透视表的动画教程。
谢谢老师们了!
回复

使用道具 举报

 楼主| 发表于 2014-10-30 17:00 | 显示全部楼层
hwc2ycy 发表于 2014-10-30 12:03

无标题.png

老师你好,帮我写下这几句的代码好吧,谢谢了老师!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-16 21:59 , Processed in 0.668584 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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