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

如何通过Excel宏实现跳过指定行复制工作表数据?附现有代码

解决Excel宏复制特定行的问题

首先咱们先对齐你的需求细节:

  • 复制Sheet1中第1到第9行的所有数据到Sheet2
  • 从第10行开始,跳过行号为「10、13、16、19……」的行(也就是行号满足 行号 Mod 3 = 1 的行),复制其余行到Sheet2

你的现有代码存在几个小问题:没处理前8行的复制、i 的递增语句不完整,而且变量 J 的逻辑和需求匹配度不高。下面是修正后的完整代码,我会逐段解释逻辑:

Sub CopySpecificRows()
    Dim i As Long ' 用Long代替Integer,避免行号超过32767时溢出
    Dim targetRow As Long
    Dim sourceSheet As Worksheet
    Dim targetSheet As Worksheet
    
    ' 定义工作表对象,避免频繁切换工作表(更高效且稳定)
    Set sourceSheet = ThisWorkbook.Sheets("Sheet1")
    Set targetSheet = ThisWorkbook.Sheets("Sheet2")
    
    ' 第一步:复制第1到第9行到Sheet2对应位置
    sourceSheet.Rows("1:9").Copy Destination:=targetSheet.Rows("1:9")
    targetRow = 10 ' 目标表的下一行从第10行开始
    
    ' 第二步:处理第10行及之后的行,动态获取源表最后一行(不用硬写5000)
    i = 10
    Do While i <= sourceSheet.Cells(sourceSheet.Rows.Count, 1).End(xlUp).Row
        ' 判断当前行是否是需要跳过的行(10、13、16...)
        If i Mod 3 <> 1 Then
            sourceSheet.Rows(i).Copy Destination:=targetSheet.Rows(targetRow)
            targetRow = targetRow + 1
        End If
        i = i + 1 ' 补全你之前未写完的行号递增逻辑
    Loop
    
    ' 清除剪贴板,避免弹出多余提示
    Application.CutCopyMode = False
End Sub

代码关键点说明:

  • 用Long替代Integer:Excel最大行号可达1048576,Integer的上限是32767,用Long能避免溢出错误。
  • 避免频繁Select操作:直接通过工作表对象操作,比反复切换工作表更高效,也不容易因为选中状态出错。
  • 动态获取最后一行:sourceSheet.Cells(sourceSheet.Rows.Count, 1).End(xlUp).Row 会自动识别源表第一列有数据的最后一行,不用硬写固定值5000,适配不同数据量。
  • 跳过行的判断逻辑:i Mod 3 <> 1 精准匹配你需要跳过的行(10 Mod3=1、13 Mod3=1……),满足条件的行直接跳过,其余行复制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:29