专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
完美Excel  ·  使用deepseek在Excel用户窗体中生 ... ·  20 小时前  
Excel之家ExcelHome  ·  还在手动筛选数据?FILTER函数这几种典型 ... ·  昨天  
完美Excel  ·  deepseek使用心得2:向deepsee ... ·  4 天前  
完美Excel  ·  使用deepseek自动合并“复杂的”Exc ... ·  5 天前  
完美Excel  ·  可以在微信上使用deepseek了 ·  2 天前  
51好读  ›  专栏  ›  完美Excel

使用deepseek自动合并工作簿

完美Excel  · 公众号  · Excel  · 2025-02-14 07:57

正文

学习Excel技术,关注微信公众号:
excelperfect

标签: AI 大模型 deepseek VBA

前几天,一位朋友在公众号留言,想要“用 ds 汇总一个个工作簿,工作簿中包含三个工作表,仅第一个表有内容,每个有数据的工作簿中的工作表格式、标题、列名都一样”。

昨晚,我做了几个简单的示例工作簿,将它们放置在一个文件夹中,如下图 1 所示。

1
每个工作簿的格式如下图 2 所示。

2
完成上述准备工作后,我向 deepseek 提问:

在同一个文件夹中有多个工作簿,例如附件中的 3 个示例工作簿,这些工作簿中都含有格式相同的工作表,其中第一行为标题行,其余行为数据行。我想将这些工作簿中的数据合并到一个新工作簿中,第一行为标题行,其余行为合并后的数据行。要求能够自己选择工作簿所在的文件夹,并自动保存新建的工作簿。请帮我使用 VBA 实现。

同时,将上述工作簿上传作为附件。

deepseek 在详细分析了我的需求,给出了解决思路后,给出的代码如下:

Sub MergeWorkbooks() Dim sourceFolder As String Dim destWorkbook As Workbook Dim sourceWorkbook As Workbook Dim ws As Worksheet Dim lastRow As Long Dim totalRows As Long Dim fileNames As Variant Dim i As Integer
' 关闭屏幕刷新和自动计算 Application.ScreenUpdating = False Application.Calculation = xlCalculationManual
' 创建新工作簿 Set destWorkbook = Workbooks.Add Set ws = destWorkbook.Sheets(1) ws.Name = "合并数据"
' 初始化标题标记 Dim headerCopied As Boolean headerCopied = False
' 选择源文件夹 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "请选择包含工作簿的文件夹" If .Show = -1 Then     sourceFolder = .SelectedItems(1) & "\" Else     MsgBox "未选择文件夹,操作已取消。", vbInformation Exit Sub End If End With
' 获取所有Excel文件 fileNames = Dir(sourceFolder & "*.xls*")
' 遍历文件 Do While fileNames <> ""   If fileNames <> ThisWorkbook.Name Then ' 排除当前工作簿     Set sourceWorkbook = Workbooks.Open(sourceFolder & fileNames)
With sourceWorkbook.Sheets(1)       lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row       If Not headerCopied Then         ' 复制标题         .Rows(1).Copy ws.Rows(1)         headerCopied = True         totalRows = 1       End If
       ' 复制数据(跳过标题)       If lastRow > 1 Then         .Range("A2:F" & lastRow).Copy         ws.Cells(totalRows + 1, 1).PasteSpecial xlPasteValues         totalRows = totalRows + lastRow - 1       End If     End With
     sourceWorkbook.Close SaveChanges:=False   End If   fileNames = Dir Loop
' 自动调整列宽 ws.Columns.AutoFit
' 保存合并后的工作簿 With Application.FileDialog(msoFileDialogSaveAs) .Title = "保存合并后的工作簿"   .InitialFileName = sourceFolder & "合并结果.xlsx" .FilterIndex = 1 If .Show Then     destWorkbook.SaveAs .SelectedItems(1)     MsgBox "数据合并完成,已保存至:" & .SelectedItems(1), vbInformation End If End With
' 恢复设置 Application.CutCopyMode = False Application.ScreenUpdating






请到「今天看啥」查看全文