0

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

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

现在,我想将文件 A、B、C 中工作表“AA”、“BB”和“CC”中“IC”、“名称”下的值组合到文件中的一个工作表中。

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

任何人都可以分享如何做到这一点?

谢谢 :)

4

3 回答 3

0

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

假设:

  • 所有工作簿标题行ICName分别位于单元格A1B1
  • 在运行此宏之前将打开所有工作簿
  • 宏将从 启动Parent Workbook,假设是存放最终结果的 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

要将此 VBA 添加到您的工作簿,您必须打开PARENT Workbook,从菜单中选择Developer Tab,从左侧菜单中打开,然后将代码粘贴到那里。Visual BasicSheet 1

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

运行宏之前的所有三个工作簿: 在此处输入图像描述

运行宏后的父工作簿: 在此处输入图像描述

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

于 2013-02-12T17:34:09.467 回答
0

我试过这个软件,它工作:http ://bulkfilemerger.com/index1

于 2013-02-13T15:47:27.503 回答
0

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

于 2013-02-12T15:15:42.553 回答