如何用循环简化VBA中H:N列的AutoFill自动填充操作?
简化VBA中AutoFill的循环实现方案
给你两种可行的简化方案,都能替代原来重复的7行AutoFill代码:
方案1:循环遍历H-N列
H列对应Excel的第8列,N列对应第14列,用For循环遍历这个列号范围,逐列执行自动填充:
替换原代码中7行AutoFill的部分为:
Dim col As Integer ' 循环H列(列号8)到N列(列号14) For col = 8 To 14 sourceWS.Cells(2, col).AutoFill Destination:=sourceWS.Range(sourceWS.Cells(2, col), sourceWS.Cells(LastRow, col)) Next col
通过Cells(行号, 列号)精准定位每列的首行公式单元格,再自动填充到该列的最后一行。
方案2:一次性填充多列区域(推荐)
Excel支持对多列区域直接执行AutoFill,只要首行有公式,一行代码就能完成所有列的填充,比循环更高效简洁:
替换原代码中7行AutoFill的部分为:
sourceWS.Range("H2:N2").AutoFill Destination:=sourceWS.Range("H2:N" & LastRow)
直接选中H2到N2的首行公式区域,一次性填充到整个H2:N&LastRow的范围。
完整优化后的代码(含额外性能优化)
还帮你去掉了没必要的工作表激活操作,并用直接赋值替代剪贴板复制,运行更稳定高效:
Sub test() Dim sourceWS As Worksheet Dim targetWS As Worksheet Dim LastRow As Long Set sourceWS = Sheets("xml data") Set targetWS = Sheets("Expiries") ' 直接通过工作表对象获取最后一行,无需激活工作表 LastRow = sourceWS.Range("A" & sourceWS.Rows.Count).End(xlUp).Row ' 清理源工作表数据 sourceWS.Range("F2:G" & LastRow).ClearContents sourceWS.Range("H3:N" & LastRow).ClearContents ' 直接赋值替代Copy/PasteSpecial,避免剪贴板占用 sourceWS.Range("F2:G" & LastRow).Value = sourceWS.Range("A2:B" & LastRow).Value ' 启用下方任意一种方案即可 ' 方案1:循环填充 ' Dim col As Integer ' For col = 8 To 14 ' sourceWS.Cells(2, col).AutoFill Destination:=sourceWS.Range(sourceWS.Cells(2, col), sourceWS.Cells(LastRow, col)) ' Next col ' 方案2:一次性填充(推荐) sourceWS.Range("H2:N2").AutoFill Destination:=sourceWS.Range("H2:N" & LastRow) End Sub
内容的提问来源于stack exchange,提问作者Tcherke
相关产品推荐
相关产品推荐

