如何在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
相关产品推荐
相关产品推荐

