You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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列值)
  • 最后弹出提示框告知操作完成

使用步骤

  1. 打开你的Excel文件,按下Alt + F11打开VBA编辑器
  2. 在左侧项目窗口右键点击你的工作簿名称,选择「插入」→「模块」
  3. 将上面的代码粘贴到新模块的代码窗口中
  4. 按下F5运行宏,或者回到Excel界面,点击「开发工具」→「宏」,选择MatchAndCopyValues后点击「执行」

运行完成后,B列就已经是实实在在的数值了,就算删掉C、D列也不会有任何影响,完全符合你的需求~

内容的提问来源于stack exchange,提问作者NZaff

火山引擎 最新活动