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

VBA需求:从Sheet1复制A7:C1009非空行至Sheet2指定位置

修正VBA代码:仅复制非空行到目标表

没问题,我帮你调整了代码,现在只会复制Sheet1(ws1)A7:C1009区域里至少有一个非空单元格的行,然后插入到Sheet2(ws2)的A7起始位置:

Sub CopyNonEmptyRows()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim sourceRow As Long, targetRow As Long
    Dim isRowEmpty As Boolean
    
    ' 指定数据源表和目标表
    Set ws1 = ThisWorkbook.Sheets("Sheet1")
    Set ws2 = ThisWorkbook.Sheets("Sheet2")
    
    ' 初始化目标起始行
    targetRow = 7
    
    ' 遍历数据源的第7行到第1009行
    For sourceRow = 7 To 1009
        isRowEmpty = True
        
        ' 检查当前行的A、B、C列是否有非空单元格
        If Not IsEmpty(ws1.Cells(sourceRow, "A")) Or _
           Not IsEmpty(ws1.Cells(sourceRow, "B")) Or _
           Not IsEmpty(ws1.Cells(sourceRow, "C")) Then
            isRowEmpty = False
        End If
        
        ' 仅当行非空时,复制整行到目标表
        If Not isRowEmpty Then
            ws1.Rows(sourceRow).Copy
            ws2.Rows(targetRow).Insert Shift:=xlDown
            targetRow = targetRow + 1 ' 目标行下移,准备下一行插入
        End If
    Next sourceRow
    
    ' 清除剪贴板,避免残留复制内容
    Application.CutCopyMode = False
End Sub

关键修正说明

  • 新增了isRowEmpty布尔变量,用来标记当前行是否全空
  • 通过Or逻辑判断当前行的A、B、C列,只要有任意一个单元格非空,就判定为非空行
  • 只有非空行才会执行复制插入操作,彻底排除了A:C列全为空的行

高效版(适合大数据量)

如果你的数据行数较多,逐行遍历可能有点慢,可以用SpecialCells方法一次性筛选非空行,效率更高:

Sub CopyNonEmptyRows_Efficient()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim sourceRange As Range, nonEmptyRows As Range
    
    Set ws1 = ThisWorkbook.Sheets("Sheet1")
    Set ws2 = ThisWorkbook.Sheets("Sheet2")
    
    ' 定义要处理的数据源区域
    Set sourceRange = ws1.Range("A7:C1009")
    
    ' 筛选出区域内包含常量或公式的非空行
    On Error Resume Next ' 防止没有非空行时触发错误
    Set nonEmptyRows = sourceRange.SpecialCells(xlCellTypeConstants).EntireRow
    Set nonEmptyRows = Union(nonEmptyRows, sourceRange.SpecialCells(xlCellTypeFormulas).EntireRow)
    On Error GoTo 0
    
    ' 如果存在非空行,复制到目标位置
    If Not nonEmptyRows Is Nothing Then
        nonEmptyRows.Copy
        ws2.Range("A7").Insert Shift:=xlDown
    End If
    
    Application.CutCopyMode = False
End Sub

这个方法通过SpecialCells直接定位所有非空单元格对应的整行,一次性完成复制,速度会快很多,适合数据量较大的场景。

内容的提问来源于stack exchange,提问作者Henrik Hultén-Karlshøj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:05:03