使用excel中的VBA合并多个excel文件

ops/2025/2/22 17:11:58/

需求是这样的:
在Windows下,用excel文件让多个小组填写了统计信息,现在我需要把收集的多个文件汇总到一个文件中,前三行为标题可以忽略,第四行为收集信息的列名,处理每一行数据的时候,发现某一行的第一列为空将不再复制处理本文件中下面的行。
在office的Excel中视图下面的宏中,创建一个新的宏,并命名为ConsolidateExcelFiles,

VBA">Sub ConsolidateExcelFiles()Dim FolderPath As StringDim FileName As StringDim wbSource As WorkbookDim wsSource As WorksheetDim wsDest As WorksheetDim LastRow As LongDim DestRow As LongDim i As LongDim fd As FileDialogDim FirstFile As BooleanDim HeaderRow As LongDim StartRow As Long' 使用文件对话框选择文件夹路径Set fd = Application.FileDialog(msoFileDialogFolderPicker)fd.Title = "选择要合并的文件所在的文件夹"If fd.Show = -1 ThenFolderPath = fd.SelectedItems(1) & "\"ElseMsgBox "未选择文件夹,操作取消。"Exit SubEnd If' 询问用户列名所在的行号HeaderRow = Application.InputBox("请输入列名所在的行号:", Type:=1)If HeaderRow < 1 ThenMsgBox "无效的行号,操作取消。"Exit SubEnd If' 创建一个新的工作簿用于汇总Set wsDest = ThisWorkbook.Sheets(1)DestRow = 1FirstFile = True' 获取文件夹中的第一个文件FileName = Dir(FolderPath & "*.xls*")' 遍历文件夹中的所有文件Do While FileName <> ""' 打开源工作簿Set wbSource = Workbooks.Open(FolderPath & FileName)Set wsSource = wbSource.Sheets(1)' 找到源工作表的最后一行LastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row' 如果是第一个文件,复制列名If FirstFile ThenwsSource.Rows(HeaderRow).Copy wsDest.Rows(DestRow)DestRow = DestRow + 1FirstFile = FalseEnd If' 从列名行的下一行开始复制数据StartRow = HeaderRow + 1For i = StartRow To LastRow' 如果第一列为空,则停止处理该文件If IsEmpty(wsSource.Cells(i, 1).Value) Then Exit For' 复制数据到目标工作表wsSource.Rows(i).Copy wsDest.Rows(DestRow)DestRow = DestRow + 1Next i' 关闭源工作簿wbSource.Close SaveChanges:=False' 获取下一个文件FileName = DirLoopMsgBox "汇总完成!"
End Sub

这里的VBA脚本通过文件夹选择的方式来选择要合并哪个文件夹下面的Excel文件
在这里插入图片描述
然后输入收集信息表中列名所在的行数:
在这里插入图片描述
最后合并的文件中只会记录一行列名,后面其他重复的列名将会被忽略掉:
在这里插入图片描述

如果需要经常使用,可以将此包含宏的Excel保存为一个xlsm格式的文件,方便后续的使用。


http://www.ppmy.cn/ops/160555.html

相关文章

如何使用 DeepSeek R1 构建开源 ChatGPT Operator 替代方案

开源大型语言模型&#xff08;LLMs&#xff09;的兴起使得创建 AI 驱动的工具比以往任何时候都更容易&#xff0c;这些工具可以与 OpenAI 的 ChatGPT Operator 等专有解决方案相媲美。在这些开源模型中&#xff0c;DeepSeek R1 以其强大的推理能力、自由的可访问性和适应性而脱…

基于vue和微信小程序的校园自助打印系统(springboot论文源码调试讲解)

第3章 系统设计 3.1系统功能结构设计 本系统的结构分为管理员和用户、店长。本系统的功能结构图如下图3.1所示&#xff1a; 图3.1系统功能结构图 3.2数据库设计 本系统为小程序类的预约平台&#xff0c;所以对信息的安全和稳定要求非常高。为了解决本问题&#xff0c;采用前端…

Github 2025-02-20 Go开源项目日报 Top10

根据Github Trendings的统计,今日(2025-02-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10JavaScript项目1Moby 项目 - 软件容器化的开源工具集 创建周期:4059 天开发语言:Go协议类型:Apache License 2.0Star数量:67419 个…

springboot单机支持1w并发,需要做哪些优化

Spring Boot单机如何支持1万并发&#xff0c;需要做哪些优化。 首先&#xff0c;我得回想一下Spring Boot处理高并发的关键点在哪里。可能涉及到多个层面&#xff0c;比如Web服务器配置、数据库优化、代码层面的调整&#xff0c;还有JVM调优之类的。 首先&#xff0c;用户可能…

【单臂路由配置】

【单臂路由配置】 设备接口IP子网网关vlanR1G0/0/1.1192.168.1.254255.255.255.0NAvlan10R1G0/0/1.2192.168.2.254255.255.255.0NAvlan20R1G0/0/1.3192.168.3.254255.255.255.0NAvlan30PC1e0/0/1192.168.1.1255.255.255.0192.168.1.254vlan10PC2e0/0/1192.168.2.1255.255.255.0…

PHP脚本示例

/*** desc 清理产品商品无效数据* param Input $input* php think goods -m Clear -a clearGoods --endTime2020-01-01 -vvv* return void* author 陈龙* date 2024-04-02 9:45*/public function clearGoods(Input $input){$options $input->getOptions();$start_time mic…

Springboot中分析SQL性能的两种方式

SQL性能分析的两种方式: 功能介绍 记录 SQL 执行时间&#xff0c;超过阈值会进行警告打印完整的 SQL 语句&#xff0c;便于调试和优化适用于开发和测试环境&#xff0c;生产环境建议关闭 实现方式: 方式一:使用 MyBatis-Plus 性能分析插件 首先需要在MyBatis-Plus配置类中配…

虚拟机的运行命令

虚拟机的运行命令通常取决于使用的虚拟化软件。以下是一些常用的虚拟机软件及其运行命令示例&#xff1a; VMware Workstation&#xff1a; vmrun -T ws start "C:\path\to\virtual_machine.vmx"VirtualBox&#xff1a; VBoxManage startvm "virtual_machine…