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

如何在Excel中批量重复工作表行(每行重复57次)

高效实现Excel每行重复指定次数的方案

问题背景

现有含39列的Excel工作表,共5000+条记录,需要将每行重复57次,最终每条记录保留58份副本。当前使用的VBA代码仅能在每行下方插入57个空白行,操作繁琐且效率极低,需更高效的实现方式。

原数据示例:每行包含39列结构化数据
期望效果示例:每行原始记录后跟随57条完全相同的副本

原代码低效原因

当前代码存在两个核心问题:

  • 逐列循环执行插入操作,总共执行39次大循环,每次循环都要操作数千行,IO开销极大
  • 仅插入空白行,未自动填充原始数据,后续还需额外操作完成复制,完全没达到最终需求

高效VBA解决方案

以下代码通过数组批量处理实现,直接生成目标数据后一次性写入工作表,避免频繁的Excel界面交互,处理5000+行数据仅需几秒:

Sub BatchDuplicateRows()
    Dim ws As Worksheet
    Dim originalData As Variant, targetData As Variant
    Dim lastRow As Long, lastCol As Long
    Dim repeatTimes As Long
    Dim i As Long, j As Long, k As Long
    
    ' 配置参数
    Set ws = ThisWorkbook.Sheets("MasterSheet") ' 目标工作表
    repeatTimes = 57 ' 重复次数(最终每条共58份)
    
    ' 关闭屏幕更新与事件,提升速度
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    ' 获取原始数据范围
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
    originalData = ws.Range(ws.Cells(1, 1), ws.Cells(lastRow, lastCol)).Value
    
    ' 初始化目标数组
    ReDim targetData(1 To lastRow * (repeatTimes + 1), 1 To lastCol)
    
    ' 填充目标数组
    For i = 1 To lastRow
        For k = 0 To repeatTimes
            For j = 1 To lastCol
                targetData((i - 1) * (repeatTimes + 1) + k + 1, j) = originalData(i, j)
            Next j
        Next k
    Next i
    
    ' 将目标数组写入工作表(可选择覆盖原数据或写入新工作表)
    ' 方案1:覆盖原数据
    ws.Range("A1").Resize(UBound(targetData, 1), UBound(targetData, 2)).Value = targetData
    
    ' 方案2:写入新工作表(取消注释使用)
    ' Dim newWs As Worksheet
    ' Set newWs = ThisWorkbook.Sheets.Add(After:=ws)
    ' newWs.Range("A1").Resize(UBound(targetData, 1), UBound(targetData, 2)).Value = targetData
    
    ' 恢复系统设置
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    
    MsgBox "批量重复完成!共生成" & UBound(targetData, 1) & "行数据"
End Sub

代码说明

  1. 先将原始数据读取到内存数组,避免反复读取工作表
  2. 根据重复次数计算目标数据的总行数,创建对应的内存数组
  3. 循环将每行原始数据复制到目标数组的对应位置
  4. 一次性将目标数组写入工作表,仅一次IO操作,效率拉满
  5. 关闭屏幕更新和事件触发,进一步提升运行速度

替代方案:Power Query(无需编程)

如果不熟悉VBA,可使用Excel内置的Power Query工具,步骤如下:

  • 选中原始数据范围,点击「数据」选项卡 → 「从表格/区域」(Excel会自动识别数据并导入Power Query编辑器)
  • 在Power Query编辑器中,选中所有列,点击「转换」选项卡 → 「重复行」
  • 在弹出的窗口中输入57(重复次数),点击确定
  • 点击「主页」选项卡 → 「关闭并上载」,将处理后的数据导入新工作表

这种方法无需编写代码,操作直观,处理大数据量同样高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:15:42