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

如何使用VBA实现每隔30行复制指定单元格区域并粘贴到目标区域

Excel VBA 间隔固定行复制数据方案

实现逻辑

  • 首个复制源区域为A4:C4,粘贴到首个目标区域P4:R4
  • 后续源区域每次向下偏移30行选取(即4→34→64……),目标区域每次向下偏移1行粘贴(即4→5→6……)
  • 遍历到A列最后一行有数据的单元格后自动终止

可直接运行的VBA代码

Sub CopyIntervalRows()
    Dim opSheet As Worksheet
    Dim sourceRow As Long, targetRow As Long, lastDataRow As Long
    
    ' 定义操作对象为当前活动工作表,如需指定固定表可替换为 Sheets("你的表名")
    Set opSheet = ActiveSheet
    ' 读取A列最后一个有数据的行号,作为遍历终止边界
    lastDataRow = opSheet.Cells(opSheet.Rows.Count, "A").End(xlUp).Row
    
    ' 初始化起始行号
    sourceRow = 4
    targetRow = 4
    
    ' 循环遍历符合规则的行
    Do While sourceRow <= lastDataRow
        ' 直接赋值传输数据,比普通复制粘贴运行速度更快,仅保留单元格值
        opSheet.Range("P" & targetRow & ":R" & targetRow).Value = _
            opSheet.Range("A" & sourceRow & ":C" & sourceRow).Value
        
        ' 行号按规则偏移
        sourceRow = sourceRow + 30
        targetRow = targetRow + 1
    Loop
    
    MsgBox "处理完成,共复制 " & targetRow - 4 & " 条数据", vbInformation
End Sub

使用说明

如果你需要保留源单元格的格式、公式等内容,把代码中直接赋值的两行替换为以下代码即可:

opSheet.Range("A" & sourceRow & ":C" & sourceRow).Copy _
    Destination:=opSheet.Range("P" & targetRow)
  • 代码默认以A列数据作为最后行判断依据,如果你的数据有效行判断依据是C列,可将读取lastDataRow行代码中的列标"A"替换为"C"
  • 运行前请确认你选中的是需要操作的工作表,避免误操作其他表的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:39:17