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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:29:16