ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: heaven_911

[求助] 发货明细统计

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-9-4 10:50 | 显示全部楼层
heaven_911 发表于 2012-9-4 09:26
第一次没发上来 继续补上

因为水平不够,所以程序写的很长,还请高手多多指点,另请楼主看是否符合要求
  1. Private Sub CommandButton1_Click()
  2.     Dim Arr, Brr, Crr, Drr, Err, i%, j%, n%, m%, Dkey, Expln$
  3.     Dim Dic1 As New Dictionary, Dic2 As New Dictionary
  4.     Arr = Range("A1").CurrentRegion.Value
  5.    
  6.     '利用字典剔除品名重复项
  7.     For i = 2 To UBound(Arr)
  8.         If Not Dic1.Exists(Arr(i, 2)) Then
  9.             n = n + 1
  10.             Dic1(Arr(i, 2)) = Array(Arr(i, 2), Arr(i, 3))
  11.             Dic2(Arr(i, 2)) = n
  12.         End If
  13.     Next
  14.    
  15.     Brr = WorksheetFunction.Transpose(WorksheetFunction.Transpose(Dic1.Items))
  16.     Dic1.RemoveAll
  17.     ReDim Crr(1 To UBound(Brr), 1 To 2)
  18.     For i = 2 To UBound(Arr)
  19.         n = Dic2(Arr(i, 2))
  20.         If Crr(n, 2) = "" Then
  21.             Crr(n, 1) = Arr(i, 4) - Arr(i, 5)
  22.             Crr(n, 2) = Arr(i, 6)
  23.         Else
  24.             Crr(n, 1) = Crr(n, 1) + Arr(i, 4) - Arr(i, 5)
  25.             '设置m表示,m=1表示入库,m=-1表示出库
  26.             If Arr(i, 4) > 0 Then
  27.                 m = 1
  28.             Else
  29.                 m = -1
  30.             End If
  31.             
  32.             '先将已存在的数据进行拆分,并加入字典
  33.             Drr = Split(Crr(n, 2), "+")
  34.             Crr(n, 2) = ""
  35.             For j = 0 To UBound(Drr)
  36.                 Err = Split(Drr(j), "*")
  37.                 If UBound(Err) = 1 Then
  38.                     Dic1(Err(0)) = Val(Err(1))
  39.                 Else
  40.                     Dic1(Err(0)) = 1
  41.                 End If
  42.             Next
  43.                
  44.             '将需要对比计算的数据进行拆分,并加入字典
  45.             Drr = Split(Arr(i, 6), "+")
  46.             For j = 0 To UBound(Drr)
  47.                 Err = Split(Drr(j), "*")
  48.                 If UBound(Err) = 1 Then
  49.                     Dic1(Err(0)) = Dic1(Err(0)) + Val(Err(1)) * m
  50.                 Else
  51.                     Dic1(Err(0)) = Dic1(Err(0)) + Val(Err(0)) * m
  52.                 End If
  53.             Next
  54.                
  55.                 For Each Dkey In Dic1.Keys
  56.                     
  57.                     '将字典的数据用"+"号和"*"号连接起来
  58.                     Expln = ""
  59.                     If Dic1(Dkey) > 1 Then
  60.                         Expln = Dkey & "*" & Dic1(Dkey)
  61.                     ElseIf Dic1(Dkey) = 1 Then
  62.                         Expln = Dkey
  63.                     End If
  64.                     
  65.                     If Expln <> "" Then
  66.                         If Crr(n, 2) = "" Then
  67.                             Crr(n, 2) = Crr(n, 2) & Expln
  68.                         Else
  69.                             Crr(n, 2) = Crr(n, 2) & "+" & Expln
  70.                         End If
  71.                     End If
  72.                 Next
  73.         End If
  74.         Dic1.RemoveAll
  75.     Next
  76.         
  77.     With Sheets("基础表")
  78.         .Cells.ClearContents
  79.         .Activate
  80.         .Range("A1:D1").Value = Array("品名", "单位", "结存", "备注")
  81.         .Range("A2").Resize(UBound(Brr), UBound(Brr, 2)) = Brr
  82.         .Range("C2").Resize(UBound(Crr), UBound(Crr, 2)) = Crr
  83.     End With
  84. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-9-4 10:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
忘记发附件了,附件在此

发货明细统计1.rar

14.86 KB, 下载次数: 33

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-4 14:04 | 显示全部楼层
哇 有这么多高手啊 还没来及细看 谢谢先

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-5 16:41 | 显示全部楼层
10楼 KCFONG兄
品名        单位        结存        备注
基布,米                748        50*10+40*4+88
浆料,KG                500        50*10
皮革,米                710        40*14+150
测试出来结果如上,品名中把单位合并在里面了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-5 16:44 | 显示全部楼层
11楼LIUZHU兄
测试2组数据:
日期        品名        单位        入库数量        出库数量        备注
9月1日        基布        米        1000                50*10+40*10+56+44
9月2日        浆料        KG        1000                50*20
9月3日        皮革        米        1000                40*20+35+36+37+38+39+15
9月4日        基布        米                626        50*5+40*8+56
9月5日        浆料        KG                750        50*15
9月6日        皮革        米                645        40*13+35+37+38+15
9月1日        基布        米        1000                50*10+40*10+56+44
9月2日        浆料        KG        1000                50*20
9月3日        皮革        米        1000                40*20+35+36+37+38+39+15
9月4日        基布        米                626        50*5+40*8+56
9月5日        浆料        KG                750        50*15
9月6日        皮革        米                645        40*13+35+37+38+15

结果如下:
品名        单位        结存        备注
基布        米        748        50*10+40*4+44*45
浆料        KG        500        50*10
皮革        米        710        40*14+36*37+39*40
明细发现错误了,小弟资质浅,看不懂哦,不知如何修改!
望高手继续支招

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-5 16:48 | 显示全部楼层
840205910 发表于 2012-9-4 10:35
日期        品名        单位        规格        入库数        入库量        出库数        出库量     ...

这种格式考虑过,但有时收一款基布会有几百件的,如果一笔笔输入,工作量太大,要求有明细的目的是为了核对,有时标签会看不清,如果弄错了,可以查看明细发现,不然光一个数字,到盘点才发现,就晚了。

TA的精华主题

TA的得分主题

发表于 2013-4-2 17:24 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-4-8 17:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
此帖我收录到我的数据结构帖子里了,详见:http://club.excelhome.net/forum. ... 920&pid=6844034
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 07:21 , Processed in 0.042521 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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