繁体   English   中英

将多个 Excel 工作簿合并为一个工作簿

[英]Combine multiple Excel workbooks into a single workbook

我是 Visual Basic 的新手。 我可以使用 Excel 2010 或 Excel 2013 来完成这项任务。

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

我需要将每个工作簿中 Sheet1 上的信息合并到一个工作簿中,这些工作簿的工作表以原始工作簿的文件名命名。 例如,combined.xlsx 将有 4 张名为一、二、三、四的工作表。 在每种情况下,底层工作表上的所有信息都应复制并合并到新工作簿中,如下所示。

  • 我需要的格式

在此处输入图片说明

我在网上找到了这个宏/插件,它使我接近使用打开文件插件选项所需的内容。

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

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

  • 正确聚合工作表,但不正确的工作表名称。

在此处输入图片说明

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

下面完成任务。

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

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

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

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

在您不理解的单词内使用带有光标的F1 ,以了解其含义。

一旦你理解了代码的作用,你就可以根据自己的需要定制它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM