Excel精英培训网

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

[已解决]如何实现合并多个工作簿的sheet1到同一个新工作簿的sheet1中?

[复制链接]
发表于 2013-3-5 17:30 | 显示全部楼层 |阅读模式
如何实现合并多个工作簿的sheet1到同一个新工作簿的sheet1中?我试了好几个vba代码,文件多了就出现数据丢失情况,但工作簿数据仅几十个!


请各位大师帮帮忙好吗?
最佳答案
2013-3-5 18:15
合并工作簿.rar (17.11 KB, 下载次数: 848)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-3-5 17:32 | 显示全部楼层
关键是里面的数据格式是否一样了。如果存放数据的位置都不一样,这样的合并就无意义了。
回复

使用道具 举报

 楼主| 发表于 2013-3-5 17:37 | 显示全部楼层
数据格式是一样,存放数据的位置大致一样,就是上下差几行
回复

使用道具 举报

发表于 2013-3-5 18:15 | 显示全部楼层    本楼为最佳答案   
合并工作簿.rar (17.11 KB, 下载次数: 848)
回复

使用道具 举报

发表于 2013-3-7 14:54 | 显示全部楼层
有专门的工具,那当然好了。
回复

使用道具 举报

发表于 2014-1-11 19:55 | 显示全部楼层
hwc2ycy 发表于 2013-3-5 18:15
放到要合并的工作簿目录中,点按钮开始。

这个太牛了,能不能从指定行开始合并?
回复

使用道具 举报

发表于 2014-1-11 20:28 | 显示全部楼层
1552174482 发表于 2014-1-11 19:55
这个太牛了,能不能从指定行开始合并?

需要把意图说明白,才好修改。

回复

使用道具 举报

发表于 2014-1-11 20:41 | 显示全部楼层
本帖最后由 1552174482 于 2014-1-11 20:47 编辑
hwc2ycy 发表于 2014-1-11 20:28
需要把意图说明白,才好修改。

比如我要从所有sheet1的第4行开始合并,因为前三行是公司抬头什么的,我不需要。
需要在您的宏里改哪些值?
下面是您的宏:
Sub 工作表()
    Dim sFile$
    Dim sPath
    Dim wbSource As Workbook
    Dim strErrMsg As String
    Dim shtDst As Worksheet
    Dim arr
    Dim lRow As Long

    Application.ScreenUpdating = False

    Set shtDst = Worksheets.Add(after:=Worksheets(Worksheets.Count))
    On Error Resume Next
    sPath = ThisWorkbook.Path & Application.PathSeparator

    sFile = Dir(sPath & "*.xl*", vbNormal + vbDirectory)

    Do While Len(sFile) > 0
        If Not sFile Like ThisWorkbook.Name Then
            Set wbSource = GetObject(sPath & sFile)
            If Not wbSource Is Nothing Then
                With wbSource.Worksheets("sheet1")
                    arr = .UsedRange.Value
                End With
                wbSource.Close False
                With shtDst
                    lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(lRow, 1).Resize(UBound(arr), UBound(arr)) = arr
                End With
                Set wbSource = Nothing
            Else
                strErrMsg = strErrMsg & sFile & "读取错误"
                Set wbSource = Nothing
            End If
        End If
        sFile = Dir
    Loop

    MsgBox "数据已经汇总在" & ActiveWorkbook.Name & " 的 " & ActiveSheet.Name & vbCr & "按确定后开始保存", vbInformation + vbOKOnly
    ActiveWorkbook.Save
    Application.ScreenUpdating = True
    If Len(strErrMsg) > 0 Then
        MsgBox strErrMsg
    Else
        MsgBox "合并完成"
    End If
End Sub

回复

使用道具 举报

发表于 2014-1-11 21:18 | 显示全部楼层
1552174482 发表于 2014-1-11 20:41
比如我要从所有sheet1的第4行开始合并,因为前三行是公司抬头什么的,我不需要。
需要在您的宏里改哪些值 ...
  1. Sub 工作表()
  2.     Dim sFile$
  3.     Dim sPath
  4.     Dim wbSource As Workbook
  5.     Dim strErrMsg As String
  6.     Dim shtDst As Worksheet
  7.     Dim arr, arrHeader
  8.     Dim lRow As Long
  9.     Dim HasHeader As Boolean
  10.     Do While Len(sFile) > 0
  11.         If Not sFile Like ThisWorkbook.Name Then
  12.             Set wbSource = GetObject(sPath & sFile)
  13.             With wbSource.Worksheets("sheet1")
  14.                 With .UsedRange
  15.                     arrHeader = .Rows("1:3").Value
  16.                     arr = .Rows("4:" & .Rows.Count).Value
  17.                 End With
  18.             End With
  19.             wbSource.Close False
  20.             With shtDst
  21.                 If Not HasHeader Then
  22.                     .Range("a1").Resize(UBound(arrHeader), UBound(arrHeader, 2)).Value = arrHeader
  23.                     HasHeader = True
  24.                 End If
  25.                 lRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
  26.                 .Cells(lRow, 1).Resize(UBound(arr), UBound(arr)) = arr
  27.             End With
  28.             Set wbSource = Nothing
  29.         Else
  30.             strErrMsg = strErrMsg & sFile & "读取错误"
  31.             Set wbSource = Nothing
  32.         End If
  33.         sFile = Dir
  34.     Loop
  35.     MsgBox "数据已经汇总在" & ActiveWorkbook.Name & " 的 " & ActiveSheet.Name & vbCr & "按确定后开始保存", vbInformation + vbOKOnly
  36.     ActiveWorkbook.Save
  37.     Application.ScreenUpdating = True
  38.     If Len(strErrMsg) > 0 Then
  39.         MsgBox strErrMsg
  40.     Else
  41.         MsgBox "合并完成"
  42.     End If
  43. End Sub
复制代码
你自己测下吧,我这没法测。


回复

使用道具 举报

发表于 2014-1-11 21:49 | 显示全部楼层
hwc2ycy 发表于 2014-1-11 21:18
你自己测下吧,我这没法测。

貌似不行,连合并都不行了,
上传了附件了,如果有空麻烦帮下忙,好不容易找到这个帖子的。
顶端标题行重复或没有也不要紧的,如果能只有一个就最好了。
其实现在的那个宏对我已经很有用了。


中型计划.rar

155.64 KB, 下载次数: 44

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 16:25 , Processed in 0.549421 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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