ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何按仓库名称修改流水账明细格式?

如何按仓库名称修改流水账明细格式?

作者:绿色风 分类: 时间:2022-08-17 浏览:98
楼主
liuguansky
Q:如何把商品流水记录按仓库分隔开来,需要达到两种效果:



A:用如下代码可以实现:
  1. Sub justtest()

  2.     Dim Arr, D, i&, ArrR(1 To 60000, 1 To 240) As String, j As Byte, iR&, iC As Byte, K&

  3.     '定义变量

  4.     Set D = CreateObject("scripting.dictionary")

  5.     '创建字典项目

  6.     Arr = Range("A1").CurrentRegion.Value

  7.     '获取待处理数据

  8.     For i = 2 To UBound(Arr, 1) '循环数据

  9.         If D.exists(Arr(i, 1)) Then '如果仓库存在

  10.             D(Arr(i, 1)) = Array(D(Arr(i, 1))(0), D(Arr(i, 1))(1) + 1)

  11.             '对个数累加

  12.         Else '否则

  13.             K = D.Count * 5 + 1 '获取仓库添加位置即行数

  14.             D.Add Arr(i, 1), Array(K, 1) '添加新仓库入字典KEY,同时初始化ITEM

  15.             For j = 1 To 4 '填写仓库记录表头

  16.                 ArrR(K, j) = Arr(1, j)

  17.             Next j

  18.         End If

  19.         iR = (D(Arr(i, 1))(1) - 1) Mod 4 + 1 '判断行号

  20.         iC = Application.RoundUp(D(Arr(i, 1))(1) / 4, 0) '判断列号

  21.         For j = 1 To 4

  22.             ArrR(D(Arr(i, 1))(0) + iR, iC * 5 - 5 + j) = Arr(i, j) '返回本行记录至结果数组

  23.         Next j

  24.     Next i

  25.     Range([f1], Cells(Cells.Count)).ClearContents

  26.     Range("f1").Resize(D.Count * 5, 240) = ArrR

  27.     Set D = Nothing

  28. End sub

  29. Sub justtest1()

  30.     Dim Arr, D, i&, ArrR(1 To 60000, 1 To 14) As String, Dt, K&, iR&, iC As Byte, j As Byte

  31.     '定义变量

  32.     Set D = CreateObject("scripting.dictionary")

  33.     '创建字典项目

  34.     Arr = Range("A1").CurrentRegion.Value

  35.     '获取待处理数据源入数组

  36.     For i = 2 To UBound(Arr, 1) '循环数组,添加字典项目,并累加计数

  37.         D(Arr(i, 1)) = D(Arr(i, 1)) + 1

  38.     Next i

  39.     s = 0 '初始化标识符

  40.     For Each Dt In D.keys '循环字典KEY项目

  41.         K = 0: K = K + 1 '初始化各KEY值标识符,同时累加

  42.         For j = 1 To 4 '生成记录表头

  43.             ArrR(s + K, j) = Arr(1, j)

  44.         Next j

  45.         For i = 2 To UBound(Arr, 1) '循环数据源

  46.             If Arr(i, 1) = Dt Then '如果满足KEY

  47.                 K = K + 1 '累加记录行

  48.                 iR = (K - 1) Mod 5 + 1 + Int((K - 1) / 15) * 5 '返回行号

  49.                 iC = Int(((K - 1) Mod 15) / 5) * 5 '返回列号

  50.                 For j = 1 To 4 '记录赋值入数组

  51.                     ArrR(s + iR, iC + j) = Arr(i, j)

  52.                 Next j

  53.             End If

  54.         Next i

  55.         s = s + Application.RoundUp((D(Dt) + 1) / 15, 0) * 5 '对整体记录进行累加

  56.     Next

  57.     Range([f1], Cells(Cells.Count)).ClearContents

  58.     Range("f1").Resize(s, 14) = ArrR

  59.     Set D = Nothing

  60. End Sub Sub
该帖已经同步到 liuguansky的微博
2楼
JOYARK1958
謝謝提供學習下載中
3楼
eliane_lei
哥的文章好

免责声明

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

评论列表
sitemap