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

如何在VBA中使用Like函数?求修正带条件复制粘贴的循环代码

修改后的VBA代码及说明

优化后的代码

Sub reverse_convertible()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim lastRowSource As Long
    Dim i As Long
    Dim targetRow As Long
    
    ' 绑定数据源和目标表对象,简化引用
    Set wsSource = ThisWorkbook.Worksheets("Worksheets")
    Set wsTarget = ThisWorkbook.Worksheets("Aggregate Table")
    
    ' 获取数据源C列的实际最后一行,适配动态数据量
    lastRowSource = wsSource.Cells(wsSource.Rows.Count, "C").End(xlUp).Row
    
    ' 目标表从第3行开始写入数据
    targetRow = 3
    
    ' 遍历数据源所有行
    For i = 1 To lastRowSource
        ' 条件判断:C列包含"Products"且A列不为空
        If wsSource.Range("C" & i) Like "*Products*" And Not IsEmpty(wsSource.Range("A" & i)) Then
            ' 复制整行数据到目标表
            wsTarget.Rows(targetRow).Value = wsSource.Rows(i).Value
            ' 目标行号递增,避免覆盖已写入的数据
            targetRow = targetRow + 1
        End If
    Next i
    
    Application.CutCopyMode = False
End Sub

关键修改点

  • 新增工作表对象绑定,避免重复书写工作表名称,同时防止因激活表变化导致的引用错误
  • 动态获取数据源最后一行,替代原代码固定的1-20行限制,适配不同数据量
  • 用targetRow变量记录目标表的写入位置,解决原代码循环覆盖同一行的问题
  • 将变量类型从Integer改为Long,避免Excel行数超过32767时的溢出错误
  • 给A列的判断指定了数据源工作表,修正原代码未指定工作表的潜在bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:51:04