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
相关产品推荐
相关产品推荐

