Excel精英培训网

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

[已解决]跨文件夹多工作薄统计

[复制链接]
发表于 2016-3-18 10:17 | 显示全部楼层 |阅读模式
本帖最后由 安全网 于 2016-3-29 11:44 编辑

统计另外一个文件夹内的多个工作薄的内容,在固定的数据后面增加列修改那些参数代码
最佳答案
2016-3-18 14:58
反正我这边运行没什么问题。

跨文件多工作薄汇总.zip

1019.65 KB, 下载次数: 12

发表于 2016-3-18 11:02 | 显示全部楼层
Sub 导入文件()
    Application.ScreenUpdating = False
    Dim wb As Workbook, Sht As Worksheet, xRng As Range
    arr = [a2:o2]   
    ReDim brr(1 To 100, 1 To UBound(arr, 2))
    r = [a65536].End(3).Row + 1      '需要导入数据的起始行
    s = 0
    'nn = Val(Cells(r - 1, 1))     '已有数据的序号
    'On Error Resume Next
    pa = Split(ThisWorkbook.Path, "\")
    For i = 0 To UBound(pa) - 1
        XPath = XPath & pa(i) & "\"
    Next
    zdir XPath         '递归获得本文件上一级文件夹内所有子文件夹内文件名,放入数组w
    Application.ScreenUpdating = False
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To s
        fn = w(i)            '要打开的文件名
        If InStr(fn, ThisWorkbook.Name) = 0 And fn Like "*.xls*" Then        '如果和本文件名不同,那么打开文件,开始导入
            Set wb = Workbooks.Open(fn)
            Set Sht = wb.Worksheets(1)
            xrr = Split(fn, "\")
            yf = xrr(UBound(xrr) - 1)      '月份
            dq = xrr(UBound(xrr) - 2)       '地区
            x = yf & dq  '月份+地区作为key,用于汇总分类
            If Not d.exists(x) Then
                n = n + 1
                d(x) = n
                brr(n, 1) = n: brr(n, 2) = yf: brr(n, 3) = dq
            End If
            p = d(x)
            For j = 4 To UBound(arr, 2)
                x = arr(1, j)     '要查找的内容
                Set xRng = Sht.UsedRange.Find(x, lookat:=xlWhole)
                If Not xRng Is Nothing Then
                    If j > 9 Then brr(p, j) = brr(p, j) + xRng.Offset(0, 1) Else brr(p, j) = brr(p, j) + xRng.Offset(1, 0)
                End If
            Next
            wb.Close False
        End If
    Next
    Set Sht = Nothing
    If n > 0 Then Cells(r, 1).Resize(n, UBound(brr, 2)) = brr
    Application.ScreenUpdating = True
End Sub
回复

使用道具 举报

发表于 2016-3-18 11:04 | 显示全部楼层
一个是列数增加了,在定义 arr = [a2:o2]   时改一下
另一个是zdir是找当前文件夹下所有子文件夹内的文件,由于此附件汇总表在单独文件夹内,所以要找到上一级文件夹,作为zdir的参数。
回复

使用道具 举报

 楼主| 发表于 2016-3-18 11:26 | 显示全部楼层
grf1973 发表于 2016-3-18 11:04
一个是列数增加了,在定义 arr = [a2:o2]   时改一下
另一个是zdir是找当前文件夹下所有子文件夹内的文件, ...

如果统计表在本地磁盘E盘的的文件夹内,数据在本地磁盘F盘内“F:\2016年\数据表,这样的该怎么设置了
回复

使用道具 举报

发表于 2016-3-18 11:28 | 显示全部楼层
xpath=" F:\2016年\数据表\"
zdir xpath
回复

使用道具 举报

 楼主| 发表于 2016-3-18 11:45 | 显示全部楼层
grf1973 发表于 2016-3-18 11:28
xpath=" F:\2016年\数据表\"
zdir xpath

还有这个行列距改了出现这样的错误


QQ图片20160318113340.png
回复

使用道具 举报

 楼主| 发表于 2016-3-18 11:58 | 显示全部楼层
grf1973 发表于 2016-3-18 11:28
xpath=" F:\2016年\数据表\"
zdir xpath

地址是这样设置的吗?设置了就运行错误
QQ图片20160318114640.png
QQ图片20160318114653.png
回复

使用道具 举报

发表于 2016-3-18 13:24 | 显示全部楼层
干脆界面选择文件夹吧。

多工作薄汇总.rar

21.42 KB, 下载次数: 18

回复

使用道具 举报

 楼主| 发表于 2016-3-18 14:23 | 显示全部楼层
grf1973 发表于 2016-3-18 13:24
干脆界面选择文件夹吧。

这个地方如果要改成65536就运行错误
QQ图片20160318141342.png
回复

使用道具 举报

发表于 2016-3-18 14:30 | 显示全部楼层
需要搞那么大吗?还是溢出?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 03:07 , Processed in 0.404465 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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