请求开发适配船舶每日日志格式的Excel合并数据宏
适配不规则空白行的船舶日志导入宏方案
这个需求完全在合理范围内,这类处理固定框架但含不规则空白行的数据导入,是Excel VBA的典型应用场景。以下是针对性的宏代码及使用说明:
核心实现代码
Sub 导入船舶日志数据() Dim 源工作簿 As Workbook, 目标工作簿 As Workbook Dim 源工作表 As Worksheet, 目标工作表 As Worksheet Dim 源行号 As Long, 目标行号 As Long Dim 源最后行 As Long, 目标最后行 As Long ' 定义工作簿和工作表(根据实际名称修改) Set 目标工作簿 = ThisWorkbook ' 当前打开的主表工作簿 Set 目标工作表 = 目标工作簿.Sheets("主表") ' 主表工作表名称 Set 源工作簿 = Workbooks.Open("C:\每日船舶日志.xlsx") ' 替换为你的日志文件路径 Set 源工作表 = 源工作簿.Sheets("日志表") ' 日志文件的工作表名称 ' 获取源数据最后一行和目标表最后一行 源最后行 = 源工作表.Cells(Rows.Count, "A").End(xlUp).Row ' 假设A列是关键数据列,无空白 目标最后行 = 目标工作表.Cells(Rows.Count, "A").End(xlUp).Row + 1 ' 目标表从下一行开始导入 ' 遍历源数据行,跳过空白行 For 源行号 = 2 To 源最后行 ' 假设第1行是表头 ' 判断当前行是否为有效数据行(可根据实际关键列调整,比如B列不为空) If Trim(源工作表.Cells(源行号, "B").Value) <> "" Then ' 复制对应列数据到目标表(示例:源表A列→目标表A列,源表B→目标表C,按需调整) 目标工作表.Cells(目标行号, "A").Value = 源工作表.Cells(源行号, "A").Value 目标工作表.Cells(目标行号, "C").Value = 源工作表.Cells(源行号, "B").Value 目标工作表.Cells(目标行号, "D").Value = 源工作表.Cells(源行号, "D").Value 目标行号 = 目标行号 + 1 ' 目标行号递增 End If Next 源行号 ' 关闭源工作簿并保存目标表 源工作簿.Close SaveChanges:=False ' 不保存源文件,避免误修改 目标工作簿.Save MsgBox "数据导入完成!" End Sub
使用说明
- 修改参数:根据你的实际文件路径、工作表名称、数据对应列,调整代码中标记的位置
- 测试运行:先备份主表和日志文件,用副本测试宏,确保数据匹配正确
- 日常使用:打开主表后,按
Alt+F11打开VBA编辑器,插入模块粘贴代码,运行宏即可
关键逻辑说明
- 通过关键列(比如包含船舶活动内容的列)判断是否为有效行,跳过空白行
- 不依赖固定行号定位,而是动态获取源数据和目标表的最后一行,适配每日格式差异
内容的提问来源于stack exchange,提问作者bobrox92
相关产品推荐
相关产品推荐

