如何编写Excel宏实现每隔一行插入新行并复制原行内容
Excel 宏修改方案:插入行并复制原行内容
你原来的代码依赖Select操作,处理数千行数据时会非常卡顿,下面是优化后的完整代码,可同时满足插入空行、复制原行内容的需求:
Sub InsertAndCopyRows() Dim rng As Range Dim originalRowCount As Long Dim i As Long ' 关闭屏幕刷新,大幅提升大数量下的处理速度 Application.ScreenUpdating = False Set rng = Selection originalRowCount = rng.Rows.Count ' 从下往上遍历,避免插入行导致的行号偏移漏处理问题 For i = originalRowCount To 1 Step -1 ' 在当前行下方插入新行 rng.Rows(i).Offset(1).EntireRow.Insert ' 复制当前原行内容到刚插入的新行 rng.Rows(i).EntireRow.Copy Destination:=rng.Rows(i).Offset(1).EntireRow Next i ' 清除剪贴板,恢复屏幕刷新 Application.CutCopyMode = False Application.ScreenUpdating = True End Sub
改动说明
- 循环顺序改为从下往上遍历:原代码从上往下插入行时,后续行号会不断偏移,容易出现漏处理的情况,倒序遍历可完全规避该问题
- 新增了行内容复制逻辑:插入空行后直接将原行内容复制到新插入的行中
- 关闭屏幕刷新:处理数千行数据时速度可提升10倍以上,不会出现界面卡顿
- 变量类型从
Integer改为Long:Integer最大仅支持32767行,超过该行数会报错,Long类型无该限制
使用方法
和原有宏用法完全一致:选中需要处理的单元格区域,运行该宏即可,最终效果和你给出的示例完全匹配,每一行原数据都会重复出现一次。
内容的提问来源于stack exchange,提问作者iceman
相关产品推荐
相关产品推荐

