Excel精英培训网

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

[已解决]如何用代码批量提取数据

[复制链接]
发表于 2015-2-7 11:20 | 显示全部楼层 |阅读模式
本帖最后由 李全有 于 2015-2-7 13:39 编辑

附件 批量提取数据附件.zip (317.18 KB, 下载次数: 12)
发表于 2015-2-7 12:15 | 显示全部楼层    本楼为最佳答案   
  1. Sub tt()
  2.     Dim arr, brr, i&, j&, x&, myPath$, myFile$
  3.     Dim sht As Worksheet, wb As Workbook, sh As Worksheet

  4.     Application.ScreenUpdating = False    '禁刷新
  5.     Application.Calculation = xlManual    '禁计算
  6.     fs = Sheets("sheet1").Range("B1")     '查找的字符
  7.     Set sht = Sheets("sheet2")             '工作表
  8.     sht.Cells.Clear                    '清除单元格
  9.     myPath = ThisWorkbook.Path & ""   '当前路径
  10.     myFile = Dir(myPath & "*.xls")     'excel文件名

  11.     ReDim brr(1 To 1000, 1 To 60)    '创建数组brr

  12.     Do While myFile <> ""    '文件名不为空时执行
  13.         If myFile <> sht.Parent.Name Then    '文件名不等于当前文件名时执行
  14.             Set wb = Workbooks.Open(myPath & myFile)   '打开文件,记为wb
  15.             Set sh = wb.Sheets("sheet1")
  16.             arr = sh.Range("A1").CurrentRegion
  17.             For i = 1 To UBound(arr)
  18.                 If InStr(arr(i, 1), fs) = 1 Then   '开头为fs
  19.                     x = x + 1
  20.                     For j = 1 To UBound(arr, 2)
  21.                         brr(x, j) = arr(i, j)      '赋值
  22.                     Next
  23.                      brr(x, j) = myFile           '最后一列为文件名
  24.                 End If
  25.             Next
  26.             wb.Close   '关闭文件
  27.         End If
  28.         myFile = Dir  '下一个文件名
  29.     Loop
  30.     sht.Range("A1").Resize(x, 60) = brr          '赋值
  31.     Application.Calculation = xlAutomatic        '自动计算
  32.     Application.ScreenUpdating = True            '刷新
  33. End Sub
复制代码
回复

使用道具 举报

发表于 2015-2-7 12:16 | 显示全部楼层
附件:

批量提取数据附件.zip (327.81 KB, 下载次数: 9)

批量提取数据附件.zip

317.18 KB, 下载次数: 5

评分

参与人数 1 +1 收起 理由
李全有 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2015-2-7 12:25 | 显示全部楼层
  1. Sub Macro1()
  2. Dim mypath$, wj$, arr, brr, i&, j%, s&
  3. ReDim brr(1 To 20000, 1 To 200)
  4. mypath = ThisWorkbook.Path & ""
  5. wj = Dir(mypath & "*.xls*")
  6. Sheet1.Activate
  7. zf = [b1]
  8. Application.ScreenUpdating = False
  9. Do While wj <> ""
  10.     If wj <> ThisWorkbook.Name Then
  11.         With GetObject(mypath & wj)
  12.             arr = .Sheets(1).Range("a1").CurrentRegion
  13.             wb = .Name
  14.             .Close 0
  15.         End With
  16.         For i = 1 To UBound(arr)
  17.             If arr(i, 1) Like "*" & zf & "*" Then
  18.                 s = s + 1
  19.                 For j = 1 To UBound(arr, 2)
  20.                     brr(s, j) = arr(i, j)
  21.                 Next
  22.                 brr(s, UBound(arr, 2)) = wb
  23.             End If
  24.         Next
  25.     End If
  26.     wj = Dir
  27. Loop
  28. Sheet2.Activate
  29. Range("a1").Resize(s, UBound(arr, 2) + 1) = brr
  30. Application.ScreenUpdating = True
  31. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
李全有 + 1 赞一个!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 18:28 , Processed in 0.354353 second(s), 18 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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