将多个Excel工作簿合并到一个工作簿中

时间:2014-10-19 20:30:42

标签: excel vba excel-vba

我是Visual Basic的新手。我可以使用Excel 2010或Excel 2013执行此任务。

我有几十个工作簿,每个工作表上都有数据。例如,One.xlsx,Two.xlsx,Three.xlsx,Four.xlsx各自包含有关其各自Sheet1的信息。

我需要将每个工作簿中Sheet1的信息组合到一个工作簿中,工作簿中的工作表是从原始工作簿的文件名中命名的。因此,例如combined.xlsx将有4张名为One,Two,Three,Four的表。在每种情况下,应在新工作簿中复制和组合基础工作表的所有信息,如下所示。

  • 我需要的格式

enter image description here

我在网上找到了这个Macro / Add-In,让我接近我需要的东西,使用开放文件添加选择。

http://www.excelbee.com/merge-excel-sheets-2010-2007-2013#close

Open Files Add-In成功地允许我将各种Workbook的工作表聚合到一个工作簿中。但是,选项卡不是从原始文件的名称中命名的。

  • 正确汇总工作表,但工作表名称不正确。

enter image description here

现在所有底层工作簿都在同一个文件夹中。如果这种情况发生变化,浏览和选择文件的能力会很好,但如果这太难了,只需在Visual Basic代码中指明目录路径即可。由此产生的组合输出可能应该是一个新的工作簿,新工作簿的文件名并不重要。例如,它可以被称为combined.xlsx。

2 个答案:

答案 0 :(得分:7)

以下完成任务。

Option Explicit

Private Sub CommandButton1_Click()

Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
Dim WrdArray() As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False

directory = "c:\test\"
fileName = Dir(directory & "*.xl??")

Do While fileName <> ""
    Workbooks.Open (directory & fileName)
        WrdArray() = Split(fileName, ".")
        For Each sheet In Workbooks(fileName).Worksheets
        Workbooks(fileName).ActiveSheet.Name = WrdArray(0)
            total = Workbooks("import-sheets.xlsm").Worksheets.Count
            Workbooks(fileName).Worksheets(sheet.Name).Copy after:=Workbooks("import-sheets.xlsm").Worksheets(total)

            GoTo exitFor:

        Next sheet

exitFor:
    Workbooks(fileName).Close
    fileName = Dir()
Loop

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

答案 1 :(得分:1)

在Excel中按Alt+F11,这将打开Excel VBA编辑器。

文章http://www.excel-spreadsheet.com/vba/debugging.htm解释了如何使用它的一些基础知识。

Module1中,有2个短子程序opensheetsmerge包含约50行代码。

F1用光标放在您不理解的单词中,以了解其含义。

了解代码的作用后,您可以根据自己的需要进行定制。