Excel精英培训网

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

[已解决]多个excel表合并的程序

[复制链接]
发表于 2015-7-7 14:14 | 显示全部楼层 |阅读模式
附件consol中有5个excel表,格式一模一样,请各位大神帮忙写一个程序,能够实现China的数据是Beijing,Shanghai,Tianjin, Guangzhou对应单元格的加总。不想要一个一个的加,因为实际中我有10个excel表,而且每一张表的内容特别多,想学习一下如何用代码实现这个加总。比较急,谢谢谢谢!
最佳答案
2015-7-7 15:13
  1. Sub 导入文件()
  2.     Application.ScreenUpdating = False
  3.     Dim Filename, wb As Workbook, Sht As Worksheet
  4.     [c4:aj58].ClearContents
  5.     res = [c4:aj58]
  6.     Filename = Dir(ThisWorkbook.Path & "\*.xls")
  7.     Do While Filename <> ""
  8.         If Filename <> ThisWorkbook.Name Then
  9.             fn = ThisWorkbook.Path & "" & Filename
  10.             Set wb = Workbooks.Open(fn)
  11.             Set Sht = wb.Worksheets(1)
  12.             arr = Sht.[c4:aj58]
  13.             wb.Close False
  14.             For i = 1 To UBound(arr)
  15.                 For j = 1 To UBound(arr, 2)
  16.                     If arr(i, j) <> 0 Then res(i, j) = res(i, j) + arr(i, j)
  17.                 Next
  18.             Next
  19.         End If
  20.         Filename = Dir
  21.     Loop
  22.     Set Sht = Nothing
  23.     [c4:aj58] = res
  24.     Application.ScreenUpdating = True
  25. End Sub
复制代码

Consol.rar

89.18 KB, 下载次数: 15

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2015-7-7 15:13 | 显示全部楼层    本楼为最佳答案   
  1. Sub 导入文件()
  2.     Application.ScreenUpdating = False
  3.     Dim Filename, wb As Workbook, Sht As Worksheet
  4.     [c4:aj58].ClearContents
  5.     res = [c4:aj58]
  6.     Filename = Dir(ThisWorkbook.Path & "\*.xls")
  7.     Do While Filename <> ""
  8.         If Filename <> ThisWorkbook.Name Then
  9.             fn = ThisWorkbook.Path & "" & Filename
  10.             Set wb = Workbooks.Open(fn)
  11.             Set Sht = wb.Worksheets(1)
  12.             arr = Sht.[c4:aj58]
  13.             wb.Close False
  14.             For i = 1 To UBound(arr)
  15.                 For j = 1 To UBound(arr, 2)
  16.                     If arr(i, j) <> 0 Then res(i, j) = res(i, j) + arr(i, j)
  17.                 Next
  18.             Next
  19.         End If
  20.         Filename = Dir
  21.     Loop
  22.     Set Sht = Nothing
  23.     [c4:aj58] = res
  24.     Application.ScreenUpdating = True
  25. End Sub
复制代码
回复

使用道具 举报

发表于 2015-7-7 15:13 | 显示全部楼层
请看附件。

Consol.rar

95.3 KB, 下载次数: 13

回复

使用道具 举报

 楼主| 发表于 2015-7-8 16:08 | 显示全部楼层
grf1973 发表于 2015-7-7 15:13
请看附件。

[em23][em23][em23]
回复

使用道具 举报

 楼主| 发表于 2015-7-8 16:09 | 显示全部楼层
grf1973 发表于 2015-7-7 15:13
请看附件。

不知为什么总说我回复信息有问题。。。。第16句报错,完全没基础的人看不懂哪里错啊???
回复

使用道具 举报

 楼主| 发表于 2015-7-8 16:11 | 显示全部楼层
grf1973 发表于 2015-7-7 15:13
请看附件。

我的package里有7张表,第一张是后面6张的汇总,然后有7到8个子公司要填这一套package,然后我再合并汇总。这种情况只能用VBA吧?不能一个一个建立链接吧?
回复

使用道具 举报

发表于 2015-7-9 10:45 | 显示全部楼层
估计可能是你待导入的表中内容有非数据型。把第16句改成 If val(arr(i, j)) <> 0 Then res(i, j) = res(i, j) + val(arr(i, j)) 试试。
回复

使用道具 举报

发表于 2015-7-14 20:47 | 显示全部楼层
下来试试 谢谢分享
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 02:27 , Processed in 0.445404 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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