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

