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

Excel非空日期按列指定次数重复写入VBA代码故障求助

问题排查与修正方案

原代码核心问题

  • 循环逻辑完全错误:Do While j = Cells(101, h)的判断条件不可能成立,j初始默认值为0,而重复系数肯定大于0,循环一次都不会执行,所以运行后没有任何输出
  • 缺少空值校验逻辑:没有判断原始日期单元格是否为空,不符合空单元格跳过的需求
  • 变量未重置:j变量处理完单个日期后没有重置初始值,后续日期的重复逻辑无法正常运行
  • 目标行号逻辑不合理:全局共用g变量,会导致多列输出行号错位,第一列写完后后续列会从第一列结束的行号继续往下写
  • 数据类型隐患:Integer最大仅支持32767的数值,系数较大、日期较多时容易溢出报错

修正后可运行代码

Sub Makro()
    Dim i As Long, j As Long, g As Long, h As Long
    Dim 重复系数 As Long

    '遍历9到13列,对应你提到的5列数据
    For h = 9 To 13
        '每列单独从105行开始写入结果,避免多列错位
        g = 105
        '读取当前列对应的重复系数,存储在第101行
        重复系数 = Cells(101, h).Value
        '系数为0或负数直接跳过当前列
        If 重复系数 <= 0 Then GoTo 下一列
        
        '遍历2到93行的原始日期
        For i = 2 To 93
            '原始单元格为空直接跳过
            If Cells(i, h).Value <> "" Then
                '按系数重复写入日期
                For j = 1 To 重复系数
                    Cells(g, h).Value = Cells(i, h).Value
                    g = g + 1
                Next j
            End If
        Next i
下一列:
    Next h   
End Sub

使用注意事项

  • 确认你的重复系数确实存储在第101行的9~13列对应位置,需填写正整数
  • 如果目标写入起始行不是105,可以自行修改g = 105中的数值
  • 如果原始日期的行范围不是2~93,可调整For i = 2 To 93的起止数值

内容的提问来源于stack exchange,提问作者Gábor Béres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:18:03