ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6573|回复: 11

[已解决] 快速按条件-跨工作薄汇总

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-5-26 00:18 | 显示全部楼层 |阅读模式
本帖最后由 nuation 于 2012-5-26 03:09 编辑

汇总表需要四列信息:自编码+品种 名称;经销商;数量;实洋;码洋;时间表
自编码+品种就是从源数据表的第一列数据, 经销商是打横着来的,所以表有八个经销商。。。就要复制八次整理,我有个效果图是复制了两个经销商的。可以参考下。
后面三列数据是经销商的数据。数量,实洋,码洋; 时间表是指源工作表的文件名,去掉菜鸟两个字后的名字 09年3月
桌面.rar (23.01 KB, 下载次数: 80)
菜鸟09年3月.XLS只是其中一个工作薄。。。还有很多个工薄(每个月一个表,格式一样,如还有“菜鸟09年4月”)所以希望写一个代码,就要工作薄所在的工作夹里面的工作薄汇总成效果汇总表一样的效果
该贴已经同步到 nuation的微博

TA的精华主题

TA的得分主题

发表于 2012-5-26 00:46 | 显示全部楼层
see if help you

菜鸟09年3月.rar

29.67 KB, 下载次数: 99

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-26 01:08 | 显示全部楼层
KCFONG 发表于 2012-5-26 00:46
see if help you

哗~ KCFONG。。。好久没见了。这个只是减少了八次复制粘贴。。同一个文件夹外面还有三十几个工作薄呢? 这个做到初步结果了(另:合计不要相加) ,这部分,老大还要出手呀

TA的精华主题

TA的得分主题

发表于 2012-5-26 01:11 | 显示全部楼层
短信收到,请测试
  1. Sub Macro1()
  2.     Dim MyPath$, MyName$, arr, brr(1 To 100000, 1 To 6), MyDate As Date, i&, j&, m&
  3.     MyPath = ThisWorkbook.Path & ""
  4.     MyName = Dir(MyPath & "*.xls")
  5.     Application.ScreenUpdating = False
  6.     Do While MyName <> ""
  7.         If MyName <> ThisWorkbook.Name Then
  8.             a = Split(MyName, "年")
  9.             MyDate = 20 & Right(a(0), 2) & "-" & Split(a(1), "月")(0) & "-1"
  10.             With GetObject(MyPath & MyName)
  11.                 arr = .Sheets(1).UsedRange
  12.                 .Close False
  13.             End With
  14.             For i = 3 To UBound(arr)
  15.                 For j = 2 To 37 Step 4
  16.                     m = m + 1
  17.                     brr(m, 1) = arr(i, 1)
  18.                     brr(m, 2) = arr(1, j)
  19.                     brr(m, 3) = arr(i, j)
  20.                     brr(m, 4) = arr(i, j + 1)
  21.                     brr(m, 5) = arr(i, j + 2)
  22.                     brr(m, 6) = MyDate
  23.                 Next
  24.             Next
  25.         End If
  26.         MyName = Dir
  27.     Loop
  28.     [a1].CurrentRegion.Offset(1).ClearContents
  29.     [a2].Resize(m, 6) = brr
  30.     Application.ScreenUpdating = True
  31. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2012-5-26 01:13 | 显示全部楼层
请看附件
桌面.rar (36.45 KB, 下载次数: 119)

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-26 01:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
要加判断了~ 有些不能复制。。。经销商那里有些不是八个的就跳错,可否根据“数量合计”这个来判断复制多少行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-26 01:35 | 显示全部楼层
zhaogang1960 发表于 2012-5-26 01:13
请看附件

   brr(m, 2) = arr(1, j) 跳下标越界~~

TA的精华主题

TA的得分主题

发表于 2012-5-26 01:40 | 显示全部楼层
nuation 发表于 2012-5-26 01:35
brr(m, 2) = arr(1, j) 跳下标越界~~

从第二列到倒数第四列:
For j = 2 To UBound(arr, 2) - 3 Step 4
桌面.rar (36.45 KB, 下载次数: 192)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-5-26 01:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. '********************************************
  2. '**********  北极狐工作室出品  **************
  3. '**********  QQ:14885553      **************
  4. '*** 新浪微博  http://weibo.com/1053147023 **
  5. '********************************************


  6. Sub Opiona()
  7. Dim f
  8. 'On Error Resume Next
  9. Application.ScreenUpdating = False '关闭屏幕刷新
  10. Application.DisplayAlerts = False '关闭提示
  11. Dim SQL$, Cnn As Object
  12. Set Cnn = CreateObject("Adodb.Connection")
  13. t = Timer
  14. s = "\*.xls"
  15. Set SH1 = Sheets("Sheet1")
  16. SH1.Range("A2:G65536").ClearContents  '清场
  17. n = 0: SQL = ""
  18. Dim Str经销商 As String
  19. Dim Str时间 As String
  20. Dim Str As String
  21. f = Dir(ThisWorkbook.Path & s) '生成查找EXCEL的目录
  22.     Do While f > ""   '在目录中循环
  23.           If f <> ThisWorkbook.Name Then   '如果不是打开的工作簿
  24.                   Set wb = Workbooks.Open(ThisWorkbook.Path & "" & f) '打开已经存在的EXCEL工件簿文件
  25.                   Cnn.Open "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no';Data Source=" & ThisWorkbook.Path & "" & f
  26.                   
  27.                   Str时间 = Mid(f, 3, Len(f) - 6)
  28.                   SQL = ""
  29.               For i = 0 To 8
  30.                   Str经销商 = wb.Sheets("Sheet1").Cells(1, i * 4 + 2)
  31.                   Str = ""
  32.                   Str = Str & "F1 AS 名称,"
  33.                   Str = Str & " '" & Str经销商 & "'" & " as 经销商,"
  34.                   Str = Str & "F" & i * 4 + 2 & " AS 数量,"
  35.                   Str = Str & "F" & i * 4 + 3 & " AS 实洋,"
  36.                   Str = Str & "F" & i * 4 + 4 & " AS 码洋,"
  37.                  ' Str = Str & "F" & i * 4 + 5 & " AS 折扣,"
  38.                   Str = Str & " '" & Str时间 & "'" & " as 时间表 "
  39.                   SQL = SQL & "select " & Str & "from [Sheet1$A3:AK2000] union all "
  40.               Next i
  41.               SQL = Mid(SQL, 1, Len(SQL) - 10)
  42.               SQL = "select * from (" & SQL & ") where 名称<>'合计' and abs(数量)>0"
  43.               r = SH1.Range("A65536").End(xlUp).Row + 1
  44.               SH1.Range("A" & r).CopyFromRecordset Cnn.Execute(SQL)
  45.               Cnn.Close
  46.               wb.Close
  47.           End If
  48.           f = Dir
  49.     Loop

  50. Application.ScreenUpdating = True
  51. Application.DisplayAlerts = True
  52. MsgBox "用时:" & Format(Timer - t, "#0.0000") & " 秒", , "北极狐提示!!"
  53. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-5-26 02:27 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 11:59 , Processed in 0.046879 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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