Excel精英培训网

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

[已解决]提取数据不全,只提取了一个表的。

[复制链接]
发表于 2015-3-20 18:26 | 显示全部楼层 |阅读模式
本帖最后由 张雄友 于 2015-3-23 18:28 编辑

提取每个表最后一行总数据,提取数据不全,只提取了一个表的。
最佳答案
2015-3-21 08:54
张雄友 发表于 2015-3-21 05:08
提取后一共是15行数据,怎么有75行?是用 open 方法遍历文件夹的。


Sub 提取每个表最后一行总数据()
    Dim mypath$, wj$, wb As Workbook, i&, j&, sh As Worksheet
    Dim arr, brr(1 To 60000, 1 To 9), s&
    [A2:I65536].ClearContents
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ThisWorkbook.Path & "\"
        If .Show = False Then Exit Sub
        mypath = .SelectedItems(1) & "\"
    End With
   Set w = Application.WorksheetFunction
    s = 0
    Filepath = GetName(mypath)
    For kk = 0 To UBound(Filepath)
        Set wb = Workbooks.Open(Filepath(kk))
        For Each sh In wb.Sheets
            If w.CountA(sh.UsedRange) Then
                    arr = sh.UsedRange
                    n = UBound(arr): s = s + 1
                    brr(s, 1) = s: brr(s, 2) = arr(1, 1)
                    For j = 3 To UBound(arr, 2)
                        brr(s, j) = arr(n, j)
                    Next
            End If
        Next
        wb.Close 0
    Next
    Range("D2").Resize(s, UBound(brr, 2)) = brr
    Application.ScreenUpdating = True
End Sub
Function GetName(lj As String)
    Dim MyName, dic, Did, i, t, F, tt, MyFileName
    Set dic = CreateObject("Scripting.Dictionary")
    Set Did = CreateObject("Scripting.Dictionary")
    dic.Add (lj), ""
    i = 0
    Do While i < dic.Count
        Ke = dic.Keys
        MyName = Dir(Ke(i), vbDirectory)
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then
                    dic.Add (Ke(i) & MyName & "\"), ""
                End If
            End If
            MyName = Dir
        Loop
        i = i + 1
    Loop
    For Each Ke In dic.Keys
        MyFileName = Dir(Ke & "*.xls*")
        Do While MyFileName <> ""
            If MyFileName <> ThisWorkbook.Name Then Did.Add (Ke & MyFileName), ""
            MyFileName = Dir
        Loop
    Next
    GetName = Did.Keys
End Function

提取每个表最后一行总数据.rar

42.83 KB, 下载次数: 15

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-3-20 20:12 | 显示全部楼层
本帖最后由 zjdh 于 2015-3-20 20:36 编辑

提取每个表最后一行总数据.rar (13.99 KB, 下载次数: 0)
回复

使用道具 举报

 楼主| 发表于 2015-3-20 22:08 | 显示全部楼层
zjdh 发表于 2015-3-20 20:12

无法下载附件。
360截图20150320220544953.jpg
回复

使用道具 举报

发表于 2015-3-21 02:35 | 显示全部楼层
  1. Sub Macro1()
  2. Dim mypath$, wj$, wb As Workbook, i%, j%
  3. Dim arr, brr(1 To 60000, 1 To 9), s&
  4. Application.ScreenUpdating = False
  5. '[a2:i65536].ClearContents
  6. With Application.FileDialog(msoFileDialogFolderPicker)
  7.       .InitialFileName = ThisWorkbook.Path & ""
  8.       If .Show = False Then Exit Sub
  9.       mypath = .SelectedItems(1) & ""
  10.       wj = Dir(mypath & "*.xls*")
  11.       Do While wj <> ""
  12.         Set wb = Workbooks.Open(mypath & wj)
  13.         For i = 1 To wb.Sheets.Count
  14.             arr = wb.Sheets(i).UsedRange
  15.             n = UBound(arr): s = s + 1
  16.             brr(s, 1) = s: brr(s, 2) = arr(1, 1)
  17.             For j = 3 To UBound(arr, 2)
  18.                 brr(s, j) = arr(n, j)
  19.             Next
  20.         Next
  21.         wb.Close 0
  22.         wj = Dir
  23.       Loop
  24.   End With
  25.   Range("a14").Resize(s, UBound(brr, 2)) = brr
  26. Application.ScreenUpdating = True
  27. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-3-21 05:08 | 显示全部楼层
dsmch 发表于 2015-3-21 02:35

提取后一共是15行数据,怎么有75行?是用 open 方法遍历文件夹的。

复件 提取每个表最后一行总数据.rar

59.72 KB, 下载次数: 5

点评

用我的代码调试  发表于 2015-3-21 07:19
回复

使用道具 举报

 楼主| 发表于 2015-3-21 08:15 | 显示全部楼层
dsmch 发表于 2015-3-21 02:35

我的意思是您的代码只适合一个文件夹的,如果有多个文件夹就是不可以的。
回复

使用道具 举报

发表于 2015-3-21 08:17 | 显示全部楼层
提取每个表最后一行总数据.rar (12.92 KB, 下载次数: 5)

评分

参与人数 1 +6 收起 理由
张雄友 + 6 多谢我从来不用:Transpose(brr)

查看全部评分

回复

使用道具 举报

发表于 2015-3-21 08:30 | 显示全部楼层
你的情况数组的大小是不确定的,而数组的扩容只能是第2维,你的格式与数组行、列相反,所以要用Transpose转置。

评分

参与人数 1 +6 收起 理由
张雄友 + 6 请看5楼。

查看全部评分

回复

使用道具 举报

发表于 2015-3-21 08:45 | 显示全部楼层
zjdh 发表于 2015-3-21 08:30
你的情况数组的大小是不确定的,而数组的扩容只能是第2维,你的格式与数组行、列相反,所以要用Transpose转 ...

我的附件不存在5楼的问题啊。
回复

使用道具 举报

发表于 2015-3-21 08:54 | 显示全部楼层    本楼为最佳答案   
张雄友 发表于 2015-3-21 05:08
提取后一共是15行数据,怎么有75行?是用 open 方法遍历文件夹的。


Sub 提取每个表最后一行总数据()
    Dim mypath$, wj$, wb As Workbook, i&, j&, sh As Worksheet
    Dim arr, brr(1 To 60000, 1 To 9), s&
    [A2:I65536].ClearContents
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ThisWorkbook.Path & "\"
        If .Show = False Then Exit Sub
        mypath = .SelectedItems(1) & "\"
    End With
   Set w = Application.WorksheetFunction
    s = 0
    Filepath = GetName(mypath)
    For kk = 0 To UBound(Filepath)
        Set wb = Workbooks.Open(Filepath(kk))
        For Each sh In wb.Sheets
            If w.CountA(sh.UsedRange) Then
                    arr = sh.UsedRange
                    n = UBound(arr): s = s + 1
                    brr(s, 1) = s: brr(s, 2) = arr(1, 1)
                    For j = 3 To UBound(arr, 2)
                        brr(s, j) = arr(n, j)
                    Next
            End If
        Next
        wb.Close 0
    Next
    Range("D2").Resize(s, UBound(brr, 2)) = brr
    Application.ScreenUpdating = True
End Sub
Function GetName(lj As String)
    Dim MyName, dic, Did, i, t, F, tt, MyFileName
    Set dic = CreateObject("Scripting.Dictionary")
    Set Did = CreateObject("Scripting.Dictionary")
    dic.Add (lj), ""
    i = 0
    Do While i < dic.Count
        Ke = dic.Keys
        MyName = Dir(Ke(i), vbDirectory)
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then
                    dic.Add (Ke(i) & MyName & "\"), ""
                End If
            End If
            MyName = Dir
        Loop
        i = i + 1
    Loop
    For Each Ke In dic.Keys
        MyFileName = Dir(Ke & "*.xls*")
        Do While MyFileName <> ""
            If MyFileName <> ThisWorkbook.Name Then Did.Add (Ke & MyFileName), ""
            MyFileName = Dir
        Loop
    Next
    GetName = Did.Keys
End Function
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 07:48 , Processed in 0.331587 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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