如何将来自2个以上文件的工作表合并到1个文件中的一个工作表中?

时间:2013-02-12 15:06:57

标签: excel

我有3个excel文件,每个包含1个工作表,这3个工作表具有相同的列标题名称。

文件A有一个名为“AA”的工作表,列标题名称为“IC”,“名称”。 文件B有一个名为“BB”的工作表,列标题名称为“IC”,“名称”。 文件C有一个名为“CC”的工作表,列标题名称为“IC”,“名称”。 。 。

现在我想将文件A,B,C中工作表“AA”,“BB”和“CC”中“IC”,“Name”下的值组合成文件中的一个工作表。 / p>

文件ZZ的工作表名为“zz”,列标题名称为“IC”,“名称”包含文件A,B和C中的所有行值...

有人可以分享怎么做吗?

谢谢:)

3 个答案:

答案 0 :(得分:0)

你能不能简单地使用复制和粘贴?将文件A的内容复制到空工作簿中,文件Z.然后复制文件B中的所有数据行(不包括标题)并粘贴到文件Z中的现有数据下面。对文件C重复。

答案 1 :(得分:0)

在不知道你的工作簿(你称之为文件)使用什么约定的情况下,我已经创建了一个宏,可以按照你的要求进行,但会做出一些假设。这完全按照您的要求进行,但可能需要根据您的文件进行一些更改。

<强>假设:

  • 所有工作簿标题行ICName分别位于单元格A1B1
  • 在运行此宏之前,所有工作簿都将打开
  • 宏将从Parent Workbook启动,假设是将保存最终结果的工作簿
  • 每个工作簿的所有值都在该工作簿的第一张表中

<强>代码

Public Sub CombineAllOpenWorkbooks()
    Dim parentWb As Workbook, childWb As Workbook
    Dim destinationWs As Worksheet, sourceWs As Worksheet

    Dim highestRowCount As Integer
    Dim firstColumnRowCount As Integer
    Dim secondColumnRowCount As Integer

    Application.ScreenUpdating = False

    'this holds reference to the parent workbook, which is where all the values go
    Set parentWb = Application.Workbooks(ThisWorkbook.Name)
    Set destinationWs = parentWb.Sheets(1)

    'for each workbook open that isn't the aprent workbook, find the last cell,
    'select it, copy its values, then paste them at the end of the parent workbooks
    'current values
    For Each childWb In Application.Workbooks
        If childWb.Name <> parentWb.Name Then
            Set sourceWs = childWb.Sheets(1)
            firstColumnRowCount = sourceWs.Cells(Rows.Count, 1).End(xlUp).Row
            secondColumnRowCount = sourceWs.Cells(Rows.Count, 2).End(xlUp).Row

            highestRowCount = firstColumnRowCount
            If firstColumnRowCount < secondColumnRowCount Then
                highestRowCount = secondColumnRowCount
            End If

            'copy from below the 'IC/Name' headers to the last cell that contains values
            sourceWs.Range(sourceWs.Cells(2, 1), sourceWs.Cells(highestRowCount, 2)).Copy

            firstColumnRowCount = destinationWs.Cells(Rows.Count, 1).End(xlUp).Row
            secondColumnRowCount = destinationWs.Cells(Rows.Count, 2).End(xlUp).Row

            highestRowCount = firstColumnRowCount
            If firstColumnRowCount < secondColumnRowCount Then
                highestRowCount = secondColumnRowCount
            End If

            'paste the previously copied values to the end of the parent workbokos values
            destinationWs.Range("A" & highestRowCount + 1).PasteSpecial Paste:=xlPasteValues
        End If
    Next childWb
    Application.ScreenUpdating = True
End Sub

To add this VBA to your workbook,您必须打开父母工作簿Developer Tab,从菜单中选择Visual Basic,然后从左侧菜单中打开Sheet 1 ,然后将代码粘贴在那里。

以下是我在测试期间使用的工作簿的一些图像(ParentWorkbook,FileA,FileB):

运行宏之前的所有三个工作簿: enter image description here

运行宏后的父工作簿: enter image description here

请注意,此代码已快速创建,并且已完成有限的测试。它当然可以清理,并且可以删除代码中的冗余;它的目的是让你开始。如果您对任何部分有任何疑问,我乐意解释。

答案 2 :(得分:0)

我尝试过这个软件并且有效:http://bulkfilemerger.com/index1