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

使用Excel VBA宏实现数据行按日期递增批量重复N次

Excel整组重复数据行并逐组递增日期实现

原始输入结构

工作表初始数据如下,第1行为表头,数据从第2行开始,行数不固定:

DateISINIssuerTypeMaturitNew Yield
20-May-2022AB1234AAbcd LtdCorporate15-Jun-2022Formula
20-May-2022AB1234HGHIJ LtdCorporate31-May-2022Formula

目标效果

  • 保留全部原始数据
  • 整组复制原始数据,每复制一组,新组的Date列日期比上一组递增1天
  • 其余列内容与原始数据完全一致

示例输出:

DateISINIssuerTypeMaturitNew Yield
20-May-2022AB1234AAbcd LtdCorporate15-Jun-2022Formula
20-May-2022AB1234HGHIJ LtdCorporate31-May-2022Formula
21-May-2022AB1234AAbcd LtdCorporate15-Jun-2022Formula
21-May-2022AB1234HGHIJ LtdCorporate31-May-2022Formula
22-May-2022AB1234AAbcd LtdCorporate15-Jun-2022Formula
22-May-2022AB1234HGHIJ LtdCorporate31-May-2022Formula

原有代码缺陷

初始提供的VBA代码仅支持逐行按G列数值插入复制行,不支持整组复制、日期批量递增的逻辑:

Sub Repeat()
   Dim i As Long
   
   For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
      Rows(i).Copy
      Rows(i).Resize(Range("G" & i)).Insert
   Next i
End Sub

可直接运行的修正代码

Sub RepeatRowsAndIncrementDate()
    Dim ws As Worksheet
    Dim startRow As Long, lastRow As Long, dataRowCount As Long
    Dim repeatCount As Long, i As Long, insertRow As Long
    Dim originalData As Variant
    Dim baseDate As Date
    
    ' ===== 可根据实际需求修改以下配置 =====
    Set ws = ActiveSheet
    startRow = 2 ' 数据起始行,默认第1行为表头
    repeatCount = 2 ' 额外生成的组数,设为2即额外生成+1天、+2天共2组数据
    ' ==================================
    
    ' 读取原始全量数据
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    dataRowCount = lastRow - startRow + 1
    originalData = ws.Range(ws.Cells(startRow, 1), ws.Cells(lastRow, 6)).Value
    baseDate = ws.Cells(startRow, 1).Value
    
    ' 关闭屏幕更新提升运行效率
    Application.ScreenUpdating = False
    
    ' 逐组生成重复数据
    For i = 1 To repeatCount
        insertRow = lastRow + 1
        ' 批量写入原始数据
        ws.Range(ws.Cells(insertRow, 1), ws.Cells(insertRow + dataRowCount - 1, 6)).Value = originalData
        ' 批量更新当前组日期
        ws.Range(ws.Cells(insertRow, 1), ws.Cells(insertRow + dataRowCount - 1, 1)).Value = baseDate + i
        ' 更新最后一行标记
        lastRow = insertRow + dataRowCount - 1
    Next i
    
    Application.ScreenUpdating = True
End Sub

使用说明

  • 如果需要调整重复生成的组数,直接修改代码中repeatCount的数值即可
  • 代码采用内存数组批量读写的方式,比逐行复制插入的运行速度快很多,数据量大时也不会卡顿
  • 如果需要保留原始单元格格式,在循环内写入数据后加一行格式复制的代码即可:ws.Range(ws.Cells(startRow, 1), ws.Cells(startRow + dataRowCount - 1, 6)).Copy: ws.Range(ws.Cells(insertRow, 1), ws.Cells(insertRow + dataRowCount - 1, 6)).PasteSpecial xlPasteFormats

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:55:05