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

遍历多工作表循环时如何正确引用活动单元格并复制符合条件行?

问题分析与解决方案

问题根源

你的代码存在两个核心问题:

  • 遍历范围是A5:W358的所有单元格,同一行会被重复检查23次(A到W列),完全冗余;
  • 单元格定位写法错误:
    • srcSheet.Range(i, "B")会生成从单元格i到B列的区域,无法正确获取当前行B列的值;
    • srcSheet.Cells(i)用法错误,Cells需要行号+列号参数,不能直接传入Range对象,这也是导致复制第1行的直接原因。

修正后的代码(推荐)

改成按行遍历,只检查每行的B列和O列,效率更高且逻辑清晰:

Sub RunReport()
    Dim srcSheet As Worksheet
    Dim rptSheet As Worksheet
    Dim rowNum As Long
    Dim srcSheets As Variant
    
    Set rptSheet = ThisWorkbook.Sheets("Report")
    Set srcSheets = Worksheets(Array("SheetA", "SheetB", "SheetC", "SheetD"))
    
    For Each srcSheet In srcSheets
        For rowNum = 5 To 358
            With srcSheet
                If .Cells(rowNum, "B").Value <> "" And .Cells(rowNum, "O").Value = "" Then
                    .Rows(rowNum).Copy Destination:=rptSheet.Cells(rptSheet.Rows.Count, "A").End(xlUp).Offset(1, 0)
                End If
            End With
        Next rowNum
    Next srcSheet
End Sub

关键修正点

  • 用rowNum遍历第5到358行,避免重复检查同一行的多个单元格;
  • 通过.Cells(rowNum, "B")和.Cells(rowNum, "O")精准定位当前行的目标列;
  • 用.Rows(rowNum).Copy正确复制整行;
  • With srcSheet简化代码,减少重复引用。

备选方案(遍历单元格版本)

如果坚持要遍历单元格,只需遍历A列的单元格(确保每行只检查一次),修正定位逻辑:

Sub RunReport()
    Dim srcSheet As Worksheet
    Dim rptSheet As Worksheet
    Dim i As Range
    Dim srcSheets As Variant
    
    Set rptSheet = ThisWorkbook.Sheets("Report")
    Set srcSheets = Worksheets(Array("SheetA", "SheetB", "SheetC", "SheetD"))
    
    For Each srcSheet In srcSheets
        For Each i In srcSheet.Range("A5:A358")
            With srcSheet
                If .Cells(i.Row, "B").Value <> "" And .Cells(i.Row, "O").Value = "" Then
                    .Rows(i.Row).Copy Destination:=rptSheet.Cells(rptSheet.Rows.Count, "A").End(xlUp).Offset(1, 0)
                End If
            End With
        Next i
    Next srcSheet
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:20:57