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

VBA实现按指定单元格文本剪切整行至目标工作表的技术问询

嘿,我来帮你搞定这段VBA代码,完美实现你要的功能~

完整实现代码
Sub ohgodwhathaveIdone()
    Dim sourceWS As Worksheet
    Dim targetWS As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim targetLastRow As Long
    
    ' 绑定源工作表和目标工作表
    Set sourceWS = ThisWorkbook.Worksheets("adds&reactivates")
    Set targetWS = ThisWorkbook.Worksheets("ChangeS")
    
    ' 获取源表DQ列的最后一行数据
    lastRow = sourceWS.Cells(sourceWS.Rows.Count, "DQ").End(xlUp).Row
    
    ' 从最后一行往上循环(避免剪切行后漏处理)
    For i = lastRow To 1 Step -1
        ' 检查当前行DQ列是否包含目标文本
        If InStr(1, sourceWS.Cells(i, "DQ").Value, "AcuteTransfer", vbTextCompare) > 0 Then
            ' 找到目标表的第一个空白行
            targetLastRow = targetWS.Cells(targetWS.Rows.Count, 1).End(xlUp).Row + 1
            
            ' 剪切整行到目标表的空白行
            sourceWS.Rows(i).Cut Destination:=targetWS.Rows(targetLastRow)
        End If
    Next i
    
    ' 操作完成提示
    MsgBox "搞定啦!所有包含「AcuteTransfer」的行都已经转移到ChangeS工作表~", vbInformation
End Sub
关键细节说明
  • 反向循环的重要性:如果从第一行往下循环,剪切行后下面的行会自动上移,导致后续的行被跳过。反向循环从最后一行往上走,就不会出现这个问题啦。
  • 灵活匹配文本:我用了InStr函数加vbTextCompare,这样会忽略大小写匹配(比如acutetransfer也会被识别)。如果你需要严格区分大小写,把vbTextCompare删掉就行;要是需要完全匹配(单元格内容和「AcuteTransfer」完全一致,不能有其他字符),直接改成sourceWS.Cells(i, "DQ").Value = "AcuteTransfer"。
  • 自动定位空白行:用Rows.Count + End(xlUp)的组合,不管目标表有没有数据,都能精准找到第一个可用的空白行,不用手动指定行号。
注意事项
  • 确保两个工作表的名称和你实际的完全一致,尤其是「adds&reactivates」里的&符号别写错哦。
  • 如果目标表「ChangeS」是空的,代码也能正常工作,会自动从第一行开始粘贴。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:17:49