工作簿间数据迁移及行删除需求:W1至W2条件匹配数据转移
跨工作簿数据迁移与行删除的VBA实现方案
针对你需要将Workbook 1(W1)中符合条件的数据迁移至Workbook 2(W2)并删除原行的需求,以下是直接可用的VBA解决方案:
核心逻辑
- 定位W1中**H列值为"No Interest"**的行
- 通过W1A列姓名匹配W2中对应人员的行
- 将W1对应行的G列备注写入W2匹配行的X列
- 删除W1中完成迁移的目标行
VBA代码实现
Sub MigrateAndDeleteRows() Dim wb1 As Workbook, wb2 As Workbook Dim ws1 As Worksheet, ws2 As Worksheet Dim lastRow1 As Long, lastRow2 As Long Dim i As Long, j As Long Dim matchFound As Boolean ' 定义两个工作簿(请根据实际文件名修改) Set wb1 = ThisWorkbook ' 假设当前打开的是W1,若不是则改为Workbooks("Workbook1.xlsx") Set wb2 = Workbooks("Workbook2.xlsx") ' 确保W2已打开 Set ws1 = wb1.Sheets(1) ' 假设数据在W1的第一个工作表,可修改为具体表名如"Sheet1" Set ws2 = wb2.Sheets(1) ' 同理修改W2的工作表 lastRow1 = ws1.Cells(Rows.Count, "A").End(xlUp).Row lastRow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row ' 从后往前遍历W1,避免删除行导致的索引错乱 For i = lastRow1 To 2 Step -1 ' 假设第1行是表头,从第2行开始遍历 If ws1.Cells(i, "H").Value = "No Interest" Then matchFound = False ' 在W2中匹配姓名 For j = 2 To lastRow2 ' 同样假设W2第1行是表头 If ws2.Cells(j, "A").Value = ws1.Cells(i, "A").Value Then ' 将W1 G列内容写入W2 X列 ws2.Cells(j, "X").Value = ws1.Cells(i, "G").Value matchFound = True Exit For End If Next j ' 无论是否匹配到,都删除W1中该行(若需保留未匹配行可注释此行) ws1.Rows(i).Delete ' 可选:如果需要提示未匹配的情况 ' If Not matchFound Then MsgBox "未在W2中找到姓名:" & ws1.Cells(i, "A").Value End If Next i MsgBox "数据迁移与删除操作完成!" End Sub
操作步骤
- 同时打开W1和W2两个工作簿
- 按下
Alt + F11打开VBA编辑器 - 在左侧工程窗口中右键点击W1的工作簿名称,选择插入→模块
- 将上述代码粘贴到模块窗口中
- 根据你的实际工作表名称、文件名修改代码中的对应参数
- 按下
F5运行宏,或者回到Excel界面通过开发工具→宏选择MigrateAndDeleteRows执行
注意事项
- 执行前请务必备份两个工作簿的数据,避免意外丢失
- 确保两个工作簿的姓名列(A列)格式一致,无多余空格或格式差异
- 如果W2中存在重复姓名,代码只会匹配第一个出现的行
内容的提问来源于stack exchange,提问作者k3vinhines
相关产品推荐
相关产品推荐

