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

如何用循环简化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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 13:37:32