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

求助:使用VBA按年份间隔复制Excel汽车数据库行

解决Excel按年份区间复制行并填充对应年份的VBA修改方案

原脚本存在三个核心问题:

  • 硬编码读取E2、F2的年份区间,没有针对每行读取对应的year_from(E列)和year_to(F列)
  • 年份写入位置错误,未指向要求的K列
  • 正向循环插入新行时,会导致后续行被跳过,应该从最后一行倒序循环

修改后的完整代码如下:

Sub DuplicateRowsByYear()
    Dim ws As Worksheet
    Dim startYear As Integer
    Dim endYear As Integer
    Dim currentYear As Integer
    Dim lastRow As Long
    Dim i As Long
    
    Set ws = ThisWorkbook.Sheets("Test")
    ' 获取初始数据的最后一行
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    ' 从最后一行倒序循环,避免插入新行导致行号混乱
    For i = lastRow To 2 Step -1
        ' 读取当前行的年份区间
        startYear = ws.Cells(i, "E").Value
        endYear = ws.Cells(i, "F").Value
        
        ' 遍历年份区间,逐行复制
        For currentYear = startYear To endYear
            ' 复制当前行到下方
            ws.Rows(i).Copy
            ws.Rows(i + 1).Insert Shift:=xlDown
            ' 粘贴值(若需保留原格式可删除此行)
            ws.Rows(i + 1).PasteSpecial xlPasteValues
            ' 将当前年份写入K列
            ws.Cells(i + 1, "K").Value = currentYear
        Next currentYear
    Next i
    
    Application.CutCopyMode = False
    MsgBox "处理完成!"
End Sub

关键修改说明:

  • 倒序循环:从最后一行往首行循环,避免插入新行后原行号偏移导致的数据遗漏
  • 逐行读取年份区间:每次循环读取当前行的E列(year_from)和F列(year_to),而非固定取E2、F2的值
  • 修正年份写入位置:明确将年份写入当前插入行的K列
  • 插入行逻辑优化:直接在当前行下方插入新行,替代原脚本中反复查找最后一行的方式,执行效率更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 11:42:38