Excel精英培训网

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

[已解决]求高手帮忙做VBA,实现报表统计,谢谢。

[复制链接]
发表于 2016-1-25 18:39 | 显示全部楼层 |阅读模式
本帖最后由 清秋淡水 于 2016-1-27 09:14 编辑

求高手帮忙做VBA,实现报表统计,谢谢,具体要求见附表《统计表实现》,谢谢。

《统计表实现》已按第一楼层主的建议做了补充,请帮忙再看一下,谢谢。
最佳答案
2016-3-24 13:18
再来。

统计表实现.rar

20.22 KB, 下载次数: 12

发表于 2016-1-26 09:40 | 显示全部楼层
楼主你的描述,不太理解,你最好模拟几组数据,并给出最后的效果,题意理解了,大家才好帮你
回复

使用道具 举报

发表于 2016-1-26 10:31 | 显示全部楼层
本帖最后由 QCW911 于 2016-3-19 22:17 编辑

顶!d=====( ̄▽ ̄*)b
回复

使用道具 举报

发表于 2016-1-30 14:27 | 显示全部楼层
关键是问题不清楚啊。
回复

使用道具 举报

 楼主| 发表于 2016-3-18 09:06 | 显示全部楼层
xiaofei1989 发表于 2016-1-30 14:27
关键是问题不清楚啊。

可能这个表有点复杂,比较难理解,你可以参考以下做好的VBA,看看是否能明白,此统计表和以下的统计表不一样的就是《统计表-实现后》工作表的AD列取值不一样,麻烦看一下是否能够理解,谢谢啦。

http://www.excelpx.com/thread-374086-1-1.html
回复

使用道具 举报

发表于 2016-3-18 10:19 | 显示全部楼层
  1. Sub grf()
  2.     Set d = CreateObject("scripting.dictionary")
  3.     arr = Sheet1.Range("a1:ca" & Sheet1.[e65536].End(3).Row)
  4.     brr = Sheets("不良代码").[a1].CurrentRegion
  5.     For i = 3 To UBound(brr)      '不良原因和代码相对应
  6.         d(brr(i, 1)) = brr(i, 2)
  7.     Next
  8.     ReDim crr(1 To 1000, 1 To 30)
  9.     For i = 4 To UBound(arr)
  10.         x = Trim(arr(i, 29)) '不良分类AC列
  11.         Do While Len(x) > 0         'AC列不为空
  12.             For k = 1 To Len(x)
  13.                 If IsNumeric(Mid(x, k, 1)) Then Exit For
  14.             Next
  15.             bl = Left(x, k - 1): sl = Val(Mid(x, k))      '不良及数量
  16.             r = r + 1: n = n + 1
  17.             crr(r, 2) = arr(i, 5) '订单号
  18.             crr(r, 10) = sl '不良数量
  19.             crr(r, 11) = IIf(d.exists(bl), d(bl), bl) '不良原因(或代码)
  20.             If n = 1 Then crr(r, 16) = arr(i, 49)   '作业时间P列值=原表AW列值    (只填 第一行)
  21.             If n = 1 And arr(i, 4) <> "是" Then crr(r, 19) = arr(i, 17)    '作业时间S列值=原表Q列值  (只填 第一行)
  22.             x = Trim(Replace(x, bl & sl, ""))
  23.         Loop
  24.         If Len(arr(i, 23)) > 0 Then         'W列不为空
  25.             r = r + 1: n = n + 1
  26.             crr(r, 2) = arr(i, 5) '订单号
  27.             crr(r, 30) = arr(i, 79) & "报废," & arr(i, 23) '确认内文
  28.         End If
  29.         If n = 0 And arr(i, 4) <> "是" Then           'W列为空,AC列为空,D列不等于“是”
  30.             r = r + 1
  31.             crr(r, 2) = arr(i, 5) '订单号
  32.             crr(r, 19) = arr(i, 17)     '作业时间S列值=原表Q列值
  33.         End If
  34.         n = 0
  35.     Next
  36.     With Sheets(2)
  37.         maxr = .[b65536].End(3).Row + 1
  38.         .Cells(maxr, 1).Resize(r, UBound(crr, 2)) = crr
  39.     End With
  40. End Sub
复制代码

统计表实现.rar

26.31 KB, 下载次数: 13

回复

使用道具 举报

 楼主| 发表于 2016-3-23 14:47 | 显示全部楼层
grf1973 发表于 2016-3-18 10:19

师傅,下午好,我点击按钮后,提示:“该宏在该工作中不可用,或宏被禁用”,已确认宏是打开的,帮我看一下怎么回事, 谢谢,
11.jpg
回复

使用道具 举报

发表于 2016-3-23 14:52 | 显示全部楼层
按钮右击,重新指定一下宏吧。我把模块设置了个名称,要重新指定宏为 “统计表实现.xls!grf.grf”
回复

使用道具 举报

 楼主| 发表于 2016-3-24 09:43 | 显示全部楼层
grf1973 发表于 2016-3-23 14:52
按钮右击,重新指定一下宏吧。我把模块设置了个名称,要重新指定宏为 “统计表实现.xls!grf.grf”

师傅,可以使用了,谢谢,但发现有点小问题麻烦再帮忙看一下,“统计表实现后”中的S列几个“生产工时”的数据没有读取过来,麻烦看看,非常感谢。

统计表实现11.rar

32.05 KB, 下载次数: 3

回复

使用道具 举报

发表于 2016-3-24 10:24 | 显示全部楼层
你原来的条件是第4列为”是“,才填写工时的。难道不是?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 18:03 , Processed in 0.367409 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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