Excel中通过VBA宏实现列匹配后跨列复制数据的需求
实现两列匹配后复制对应列值的VBA宏
没问题,我帮你写个简单易懂的VBA宏,完美解决你的需求——毕竟用VLOOKUP的话,删掉C、D列后公式会出错,而宏是直接把值写到B列,删原数据也不会影响结果。
完整VBA代码
Sub MatchAndCopyValues() Dim ws As Worksheet Dim lastRowA As Long, lastRowC As Long Dim i As Long, j As Long ' 设置要操作的工作表,这里用当前激活的工作表,你也可以改成具体表名比如Sheet1 Set ws = ActiveSheet ' 获取A列和C列的最后一行行号,避免循环空行 lastRowA = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row lastRowC = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row ' 循环A列的每一行 For i = 1 To lastRowA ' 循环C列的每一行找匹配项 For j = 1 To lastRowC ' 如果A列当前值和C列当前值匹配 If ws.Cells(i, "A").Value = ws.Cells(j, "C").Value Then ' 把对应D列的值复制到B列 ws.Cells(i, "B").Value = ws.Cells(j, "D").Value ' 找到匹配项就跳出内层循环,不用继续找了 Exit For End If Next j Next i MsgBox "匹配复制完成!", vbInformation End Sub
代码说明
- 先获取A列和C列的最后一行行号,避免循环空行,提升运行效率
- 双层循环逻辑:外层遍历A列每一行,内层遍历C列寻找匹配值
- 一旦找到匹配项,直接将对应D列的值赋值给B列,随后跳出内层循环(如果C列存在多个匹配项,只会取第一个匹配的D列值)
- 最后弹出提示框告知操作完成
使用步骤
- 打开你的Excel文件,按下
Alt + F11打开VBA编辑器 - 在左侧项目窗口右键点击你的工作簿名称,选择「插入」→「模块」
- 将上面的代码粘贴到新模块的代码窗口中
- 按下
F5运行宏,或者回到Excel界面,点击「开发工具」→「宏」,选择MatchAndCopyValues后点击「执行」
运行完成后,B列就已经是实实在在的数值了,就算删掉C、D列也不会有任何影响,完全符合你的需求~
内容的提问来源于stack exchange,提问作者NZaff




