ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何依结算价格表分手机品牌拆分销售流水记录?

如何依结算价格表分手机品牌拆分销售流水记录?

作者:绿色风 分类: 时间:2022-08-17 浏览:124
楼主
liuguansky
Q:如何依结算价格表分手机品牌拆分销售流水记录?
[以结算价格表中的国代商的不重复清单建立分表,分表的流水记录按销售统计报表中手机品牌与结算价格表中的手机品牌匹配筛选]
A:用如下代码可以实现:

  1. Sub justtestU()
  2.     Dim arr, ars, dic As New Dictionary, di As New Dictionary, i&, d, d1, arhead, k&, str1$, arrt()
  3.     arhead = Array("销售日期", "分公司", "品牌", "机型", "销售数量(台)", _
  4.             "结算价    (元/台)", "合计(元)", "备注")
  5.     On Error Resume Next
  6.     Application.ScreenUpdating = False
  7.     Application.DisplayAlerts = False
  8.     With Sheets("ESS终端销售额统计报表")
  9.         ars = .Cells(6, 2).Resize(.Cells(.Rows.Count, 6).End(3).Row - 5, 5).Value
  10.     End With
  11.     With Sheets("结算价格表")
  12.         arr = .Cells(2, 2).Resize(.Cells(.Rows.Count, 2).End(3).Row - 2, 5).Value
  13.     End With
  14.     For i = 1 To UBound(arr, 1)
  15.         If arr(i, 5) <> "国代商" And arr(i, 5) <> "" Then
  16.             If Not dic.Exists(arr(i, 5)) Then dic.Add arr(i, 5), ""
  17.         End If
  18.     Next i
  19.     For Each d In dic.Keys
  20.         k = 0
  21.         Worksheets(d).Delete
  22.         Worksheets.Add after:=Worksheets(Sheets.Count)
  23.         With ActiveSheet
  24.             .Name = d
  25.             .Range("A1").Resize(1, 8) = arhead
  26.             For i = 1 To UBound(arr, 1)
  27.                 If arr(i, 5) = d Then
  28.                         str1 = "*" & arr(i, 1) & "*" & arr(i, 2) & "*"
  29.                         If Not di.Exists(str1) Then di.Add str1, arr(i, 4)
  30.                 End If
  31.             Next i
  32.             For i = 1 To UBound(ars, 1)
  33.                 str1 = ars(i, 3) & ars(i, 4)
  34.                 For Each d1 In di.Keys
  35.                     If str1 Like d1 Then
  36.                         k = k + 1: ReDim Preserve arrt(1 To 8, 1 To k)
  37.                         arrt(2, k) = ars(i, 1): arrt(3, k) = ars(i, 3): arrt(4, k) = ars(i, 4)
  38.                         arrt(5, k) = ars(i, 6): arrt(6, k) = di(d1): arrt(7, k) = arrt(5, k) * arrt(6, k): Exit For
  39.                     End If
  40.                 Next d1
  41.             Next i
  42.             .Cells(2, 1).Resize(k, 8) = Application.Transpose(arrt)
  43.         End With
  44.         di.RemoveAll
  45.     Next
  46.     Application.DisplayAlerts = True
  47.     Application.ScreenUpdating = True
  48. End Sub

具体示例文件如下:
2楼
eliane_lei
进来学习,谢谢分享!

免责声明

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

评论列表
sitemap