ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何按库存量对订单进行分配?(vba字典)

如何按库存量对订单进行分配?(vba字典)

作者:绿色风 分类: 时间:2022-08-17 浏览:89
楼主
wcymiss
Q:如何按库存量对订单中的欠货进行分配?“订单”表是订单日期与欠货的明细,“库存”表是现有库存,现在需要根据订单时间的先后顺序,把库存里面的货分给客户,最终的结果就如“分配”表所示。同一个品名,订单时间早的,要把库存里面的货先给它分配。(下图依次为订单、分配、库存)

 

 

 
A:先将订单表按“品名”、“订单日期”进行升序排序。然后,按alt+F11,将下面的代码拷贝至“订单”表下。
  1. Sub 按库存分配订单()
  2.     Dim d, arr, i&, arrt(), k
  3.     Set d = CreateObject("scripting.Dictionary") '定义字典
  4.     With Sheets("库存")
  5.         arr = .Range("A1").CurrentRegion.Value '将库存表区域赋值给数组
  6.         For i = 2 To UBound(arr, 1)
  7.             If d.Exists(arr(i, 1)) Then
  8.                 d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 2) '库存的品名作为字典Key值,同品名的汇总库存量作为Item值。
  9.                 Else: d.Add arr(i, 1), arr(i, 2)
  10.             End If
  11.         Next i
  12.     End With
  13.     k = d.Items '将字典的Item赋值给数组
  14.     arr = Range("A1").CurrentRegion.Value '将订单表区域赋值给数组
  15.     ReDim arrt(1 To UBound(arr, 1), 1 To 2) '重定义数组arrt,以备赋值
  16.     arrt(1, 1) = "可分配量": arrt(1, 2) = "备注"
  17.     With Sheets("分配")
  18.         .Cells.Clear '清楚即将要填写数据的区域
  19.         .Range("a1").Resize(UBound(arr, 1), UBound(arr, 2)) = arr '将数组arr也就是订单表的数据复制到分配表
  20.         For i = 2 To UBound(arr, 1)
  21.             If d.Exists(arr(i, 2)) Then
  22.                 arrt(i, 1) = Application.Min(arr(i, 5), d(arr(i, 2))) '比较库存与订单的大小,取最小值。
  23.                 d(arr(i, 2)) = d(arr(i, 2)) - arrt(i, 1) '扣除已分配的数量后赋值给Item
  24.                 arrt(i, 2) = arrt(i, 1) & "*已分配"
  25.                 Else: arrt(i, 1) = 0
  26.             End If
  27.         Next i
  28.         .Range("a1").Offset(0, UBound(arr, 2)).Resize(UBound(arr, 1), 2) = arrt '数组复制到分配表
  29.         Range("a1").Copy
  30.         .Range("A1").CurrentRegion.Rows(1).PasteSpecial xlPasteFormats '设置标题行格式
  31.         .Columns(4).NumberFormat = "yyyy-mm-dd" '将日期数据设置格式
  32.         .Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous '设置边框
  33.     End With
  34.     Set d = Nothing
  35. End Sub


如何按库存量对订单进行分配?(vba字典).rar
2楼
xyf2210
跟着吴姐学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap