VBA使用动态变量实现跨选区居中及工作表数据复制操作求助
VBA代码优化方案
优化后可自动遍历所有行完成需求的代码如下:
Sub months() Dim i As Integer Dim lastRow As Integer Dim targetRng As Range Dim alignRng As Range ' 获取Data工作表有效数据的最后一行行号 With Worksheets("Data") lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With ' 循环遍历所有有效行 For i = 1 To lastRow With Worksheets("Data") ' 获取Overview表中要写入值的起始单元格 Set targetRng = Worksheets("Overview").Range(.Range("B" & i).Value) ' 拼接要设置跨列居中的范围:B列值为起始,C列值为结束 Set alignRng = Worksheets("Overview").Range(.Range("B" & i).Value & ":" & .Range("C" & i).Value) ' 直接赋值,无需复制粘贴 targetRng.Value = .Range("A" & i).Value End With ' 设置跨列居中 With alignRng .MergeCells = False .HorizontalAlignment = xlCenterAcrossSelection End With Next i ' 清空对象释放内存 Set targetRng = Nothing Set alignRng = Nothing End Sub
核心修改说明
- 新增有效行自动识别逻辑:通过
lastRow变量自动获取Data表A列有数据的最后一行,无需手动调整循环范围,新增月份数据后可直接运行 - 动态生成对齐范围:每次循环根据Data表B、C列的单元格值自动拼接跨列区域,替代原代码硬编码的
Range("F1:I1") - 优化操作逻辑:移除了所有
Select、Activate、复制粘贴操作,直接操作单元格对象,运行效率更高,也不会因为工作表激活状态异常导致报错 - 调整执行顺序:先取消区域内的合并单元格,再设置跨列居中,避免原有合并单元格导致的格式异常
内容的提问来源于stack exchange,提问作者scott_od
相关产品推荐
相关产品推荐

