VBA条件复制代码异常:符合条件的数据未正确复制求助
嘿,我瞅了下你的VBA代码,问题主要出在两个地方,这才导致复制结果完全不符合预期:
问题1:单元格范围写错了
你写的 Source.Range("B2:B:20") 多了个多余的冒号,正确的范围应该是 Source.Range("B2:B20")。这个错误会让VBA识别错误的单元格区域,循环逻辑从根上就歪了。
问题2:复制的行号不匹配
你用变量 b 同时控制源工作表的行和目标工作表的行,这完全不对。比如当循环到B列第5行(值10)时,b 还是2,你复制的是源表第2行的数据,而不是当前符合条件的第5行。这就是为啥你得到的是1、2、3这些不符合条件的数据——你复制的是源表前几行,不是对应条件的行。
修正后的代码
Sub findValues() Dim c As Range Dim targetRow As Integer ' 改个变量名更清晰,专门控制目标表的行 Dim Source As Worksheet Dim Target As Worksheet ' 补上变量类型声明 Set Source = ActiveWorkbook.Worksheets("Source2") Set Target = ActiveWorkbook.Worksheets("Code Trial2") targetRow = 2 ' 目标表从第2行开始贴数据 ' 修正单元格范围为B2:B20 For Each c In Source.Range("B2:B20") If c.Value >= 10 Then ' 复制当前c所在行的A列和B列到目标表的targetRow行 Source.Cells(c.Row, "A").Copy Target.Cells(targetRow, "A").PasteSpecial xlPasteValues Source.Cells(c.Row, "B").Copy Target.Cells(targetRow, "B").PasteSpecial xlPasteValues targetRow = targetRow + 1 ' 目标行往下走一行 End If Next c ' 清空剪贴板,避免Excel一直显示粘贴状态 Application.CutCopyMode = False End Sub
代码修改说明
- 把变量
b改名为targetRow,让作用更明确——它只负责记录目标工作表要粘贴的行号 - 修正了循环的单元格范围
B2:B20 - 复制源数据时用
c.Row获取当前符合条件的单元格所在的行,这样就能精准复制对应行的数据 - 最后加了
Application.CutCopyMode = False来清除剪贴板,是个实用的小细节
运行这个修正后的代码,目标表就会正确显示10、12、13对应的行数据啦!
内容的提问来源于stack exchange,提问作者user11427018
相关产品推荐
相关产品推荐

