Excel精英培训网

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

[已解决]求助!用VBA将多个Excel中数据填入总表

[复制链接]
发表于 2015-8-4 20:27 | 显示全部楼层 |阅读模式
我现在有一些数据是从机器上下来的,有100个excel表,我希望从采集表中的I列里的个别数据填入总表中,比如:

将1_ISM.xls中 I72的填入汇总表的B5,
                      I73 填入 C5
                      I74 填入 D5,
                      I75 填入 E5,
                      I82 填入 I5,
                      I83 填入 J5,
                      I80 填入K5,  
                      I81 填入 L5

请高手帮忙用VBA 解决下
最佳答案
2015-8-5 10:31
Sub test()
    Dim p$, f$, A, B, t%, str$, tm&

    tm = Timer
    Application.ScreenUpdating = False
    Call test2
    A = Sheets(1).UsedRange
    p = ThisWorkbook.Path & "\"
    str = ThisWorkbook.Name

    f = Dir(p)
    Do While f <> ""
        If f <> str Then
            With GetObject(p & f)
                B = .Sheets(1).[I72:I83]
                .Close 0
            End With

            t = VBA.Split(f, "_")(0)
            t = (t - 1) * 7 + 1 + 4
            A(t, 2) = B(1, 1)
            A(t, 3) = B(2, 1)
            A(t, 4) = B(3, 1)
            A(t, 5) = B(4, 1)
            A(t, 9) = B(9, 1)
            A(t, 10) = B(10, 1)
            A(t, 11) = B(7, 1)
            A(t, 12) = B(8, 1)
        End If
        f = Dir
    Loop

    [a1].Resize(UBound(A), UBound(A, 2)) = A
    MsgBox Format(Timer - tm, "0.000") & "s 完成!"
End Sub

'可选,清除 "汇总.xlsm" 之前保存的数据
Sub test2()
    Dim A, i, j
    A = Sheets(1).UsedRange
    For i = 5 To UBound(A) Step 7
        For j = 2 To 5
            A(i, j) = ""
        Next j

        For j = 9 To 12
            A(i, j) = ""
        Next j
    Next i
    [a1].Resize(UBound(A), UBound(A, 2)) = A
End Sub


test2.rar (150.59 KB, 下载次数: 24)

test.rar

156.14 KB, 下载次数: 10

发表于 2015-8-4 23:26 | 显示全部楼层

QQ截图20150804231636.jpg


QQ截图20150804231510.jpg


没看懂。如果只2个文件,汇总后是怎样的?
回复

使用道具 举报

 楼主| 发表于 2015-8-5 09:50 | 显示全部楼层
爱疯 发表于 2015-8-4 23:26
没看懂。如果只2个文件,汇总后是怎样的?

不好意思 ,我重新上传了总汇表,我举了2个产品的例子,可以帮忙看看嘛?

汇总.rar

25.26 KB, 下载次数: 2

回复

使用道具 举报

发表于 2015-8-5 10:31 | 显示全部楼层    本楼为最佳答案   
Sub test()
    Dim p$, f$, A, B, t%, str$, tm&

    tm = Timer
    Application.ScreenUpdating = False
    Call test2
    A = Sheets(1).UsedRange
    p = ThisWorkbook.Path & "\"
    str = ThisWorkbook.Name

    f = Dir(p)
    Do While f <> ""
        If f <> str Then
            With GetObject(p & f)
                B = .Sheets(1).[I72:I83]
                .Close 0
            End With

            t = VBA.Split(f, "_")(0)
            t = (t - 1) * 7 + 1 + 4
            A(t, 2) = B(1, 1)
            A(t, 3) = B(2, 1)
            A(t, 4) = B(3, 1)
            A(t, 5) = B(4, 1)
            A(t, 9) = B(9, 1)
            A(t, 10) = B(10, 1)
            A(t, 11) = B(7, 1)
            A(t, 12) = B(8, 1)
        End If
        f = Dir
    Loop

    [a1].Resize(UBound(A), UBound(A, 2)) = A
    MsgBox Format(Timer - tm, "0.000") & "s 完成!"
End Sub

'可选,清除 "汇总.xlsm" 之前保存的数据
Sub test2()
    Dim A, i, j
    A = Sheets(1).UsedRange
    For i = 5 To UBound(A) Step 7
        For j = 2 To 5
            A(i, j) = ""
        Next j

        For j = 9 To 12
            A(i, j) = ""
        Next j
    Next i
    [a1].Resize(UBound(A), UBound(A, 2)) = A
End Sub


test2.rar (150.59 KB, 下载次数: 24)
回复

使用道具 举报

 楼主| 发表于 2015-8-5 10:42 | 显示全部楼层
爱疯 发表于 2015-8-5 10:31
Sub test()
    Dim p$, f$, A, B, t%, str$, tm&

完美,谢谢~~~
回复

使用道具 举报

 楼主| 发表于 2015-8-5 11:23 | 显示全部楼层
爱疯 发表于 2015-8-5 10:31
Sub test()
    Dim p$, f$, A, B, t%, str$, tm&

你好,我发现个问题,有4列数据反了,K列的数据应该和I列的数据对调,L列的数据应该和J列的数据对调,可以再帮忙看吗


回复

使用道具 举报

发表于 2015-8-5 11:35 | 显示全部楼层
hadesqu 发表于 2015-8-5 11:23
你好,我发现个问题,有4列数据反了,K列的数据应该和I列的数据对调,L列的数据应该和J列的数据对调,可以 ...

没懂你说的怎样不对应。

要不你把这8个等式,手工谁对应谁,下午再来改。。。。
回复

使用道具 举报

 楼主| 发表于 2015-8-5 13:35 | 显示全部楼层
爱疯 发表于 2015-8-5 11:35
没懂你说的怎样不对应。

要不你把这8个等式,手工谁对应谁,下午再来改。。。。

谢谢啦,我已经看懂你的程序了,学习了,自己已经改好位子了,谢谢~

点评

OK  发表于 2015-8-5 15:17
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 23:34 , Processed in 0.624035 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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