You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Excel VBA批量匹配多值复制行至新表?含粘贴与删行需求

优化后的VBA解决方案

以下是满足你所有需求的修改后代码,同时修复了原代码中的逻辑问题:

Sub NYC()
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim lastRowSource As Long, targetStartRow As Long
    Dim matchValues As Variant
    Dim i As Long, processedRows As Long
    
    ' 定义需要匹配的51个特定值(替换为你的实际值,继续补充剩余项)
    matchValues = Array("值1", "值2", "值3", "值4", "值5", _
                       "值6", "值7", "值8", "值9", "值10", _
                       ' ... 此处添加剩余41个值 ...
                       "值51")
    
    ' 初始化工作表引用
    Set wsSource = ThisWorkbook.Worksheets("DLS-Route")
    Set wsTarget = ThisWorkbook.Worksheets("NYC Source")
    
    ' 目标表固定从第3行开始粘贴(表头下留空行)
    targetStartRow = 3
    
    ' 获取源表B列最后一行数据的行号
    lastRowSource = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
    
    ' 关闭屏幕更新与事件触发,提升执行效率
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ' 从下往上遍历,避免删除行导致的索引错位
    For i = lastRowSource To 1 Step -1
        ' 判断当前单元格值是否在匹配列表中
        If Not IsError(Application.Match(wsSource.Cells(i, "B").Value, matchValues, 0)) Then
            ' 复制行到目标表的下一个空行
            wsSource.Rows(i).Copy Destination:=wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Offset(1)
            
            ' 确保首次粘贴从第3行开始
            If wsTarget.Cells(targetStartRow, "A").Value = "" Then
                wsTarget.Rows(wsTarget.Cells(wsTarget.Rows.Count, "A").End(xlUp).Row).Cut _
                    Destination:=wsTarget.Cells(targetStartRow, "A")
            End If
            
            ' 删除源表中的匹配行
            wsSource.Rows(i).Delete
            processedRows = processedRows + 1
        End If
    Next i
    
    ' 恢复系统设置
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    ' 操作完成提示(可选)
    MsgBox "操作完成,共处理 " & processedRows & " 行数据", vbInformation
End Sub

功能说明

  • 多值匹配:通过matchValues数组存储51个目标值,使用Application.Match快速校验,比逐个判断更简洁易维护
  • 固定起始粘贴行:强制目标表从第3行开始粘贴,若目标表原有数据则接在数据末尾,始终保持表头下留空行
  • 安全删除源行:采用从下往上遍历的方式,避免删除行后后续行索引错乱导致的漏删问题
  • 性能优化:关闭屏幕更新和事件触发,减少执行过程中的屏幕闪烁,提升运行速度

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:02:25