Excel精英培训网

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

[已解决]求高手修改VBA代码

[复制链接]
发表于 2014-12-12 22:37 | 显示全部楼层 |阅读模式
求高手修改VBA代码     附附件
最佳答案
2014-12-15 11:20
采用原附件固定表式(8--100,108--200行两张表),B列客户没自动生成。如果需要的话也可以根据“出货数据”表自动生成,这样表格大小就可以根据客户数自动调节了。

附件.rar

152.05 KB, 下载次数: 8

发表于 2014-12-13 01:07 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-12-13 18:32 | 显示全部楼层
猛哥 发表于 2014-12-13 01:07
但愿,有所突破。

老师们帮帮忙吧

回复

使用道具 举报

发表于 2014-12-15 11:11 | 显示全部楼层
  1. Sub tt()
  2. Dim arr, i&, j&, sht2 As Worksheet
  3.     arr = Worksheets("出货数据").[a1].CurrentRegion  '将出货数据读入数组,其中3列为客户名称,5列为产品名称,9列为产品数量,11列为金额,18列为日期
  4.     d1 = Cells(4, 7): d2 = Cells(4, 10)
  5.     Set d = CreateObject("scripting.dictionary")   '出货
  6.     Set dd = CreateObject("scripting.dictionary")   '退货
  7.    
  8.     For i = 2 To UBound(arr)        '读入数据,客户名+品项为key,数量为item
  9.         If arr(i, 18) >= d1 And arr(i, 18) <= d2 And arr(i, 11) <> 0 Then       '日期符合条件,总金额不为0
  10.             xkey = arr(i, 3) & arr(i, 5): xcount = arr(i, 9)
  11.             If xcount > 0 Then   '数量大于0,出货
  12.                 d(xkey) = d(xkey) + xcount
  13.             ElseIf xcount < 0 Then    '数量小于0,退货
  14.                 dd(xkey) = dd(xkey) + Abs(xcount)
  15.             End If
  16.         End If
  17.     Next
  18.    
  19.     [c8:cp100].ClearContents       '出货表
  20.     arr = [b7:cp100]
  21.     For i = 2 To UBound(arr)
  22.         If arr(i, 1) <> "" Then
  23.             For j = 2 To UBound(arr, 2)
  24.                 If arr(1, j) <> "" Then
  25.                     xkey = arr(i, 1) & arr(1, j)
  26.                     arr(i, j) = d(xkey)
  27.                 End If
  28.             Next
  29.         End If
  30.     Next
  31.     [b7:cp100] = arr
  32.    
  33.     [c108:cp200].ClearContents    '退货表
  34.     arr = [b107:cp200]
  35.     For i = 2 To UBound(arr)
  36.         If arr(i, 1) <> "" Then
  37.             For j = 2 To UBound(arr, 2)
  38.                 If arr(1, j) <> "" Then
  39.                     xkey = arr(i, 1) & arr(1, j)
  40.                     arr(i, j) = dd(xkey)
  41.                 End If
  42.             Next
  43.         End If
  44.     Next
  45.     [b107:cp200] = arr
  46.    
  47. End Sub
复制代码
回复

使用道具 举报

发表于 2014-12-15 11:20 | 显示全部楼层    本楼为最佳答案   
采用原附件固定表式(8--100,108--200行两张表),B列客户没自动生成。如果需要的话也可以根据“出货数据”表自动生成,这样表格大小就可以根据客户数自动调节了。

附件.rar

161.95 KB, 下载次数: 7

回复

使用道具 举报

 楼主| 发表于 2014-12-15 23:51 | 显示全部楼层
grf1973 发表于 2014-12-15 11:20
采用原附件固定表式(8--100,108--200行两张表),B列客户没自动生成。如果需要的话也可以根据“出货数据” ...

非常感谢grf1973老师的热心帮忙!你写得太完美了!退货表因为需要以负数体现数值,我只是把dd(xkey) = dd(xkey) + ABS(xcount)改为dd(xkey) = dd(xkey) + xcount就是我需要的结果,论坛有了你们这些高手在精彩纷呈啊!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 03:05 , Processed in 0.337684 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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