制作动态 VBA 自动填充范围

Posted

技术标签:

【中文标题】制作动态 VBA 自动填充范围【英文标题】:Making a dynamic VBA autofill range 【发布时间】:2018-03-16 13:23:17 【问题描述】:

目前,每当有更多数据发布到工作表中时,我有一些 VBA 代码可以自动填充 AE:AH 列中的公式。如果我们要添加更多公式,我正试图在未来证明它并使范围更加动态。这是当前代码。

Sheets(twtsumsheet).Select
usedRows1 = Worksheets(twtsumsheet).Cells(Worksheets(twtsumsheet).Rows.Count, "A").End(xlUp).Row
Range("AE2:AH2").Select
Selection.AutoFill Destination:=Worksheets(twtsumsheet).Range(Cells(2, 31), Cells(usedRows1, 34)), Type:=xlFillDefault

例如,当前公式位于 AE:AH 列中。假设我们要再添加一个以从数据中进行另一次计算,所以现在我们在 AE:AI 列中有公式。我的宏将继续自动填充 AE:AH 中的公式,因为这个 "Range("AE2:AH2").Select" 和这个 "Cells(2, 31), Cells(usedRows1, 34)"

我是 VBA 编码的新手,所以我没有任何好的想法。任何帮助表示赞赏。

【问题讨论】:

你已经使用了一种方法来定位最后一行,为什么不利用它来找到最后一列,提示xltoLeft ^^rondebruin.nl/win/s9/win005.htm 【参考方案1】:

我的 OCD 迫使我稍微“清理”这段代码......

遵循@Scott Craner 的建议,查找包含数据的最后一列。

注意:您应该远离使用Select

With Sheets(twtsumsheet)
    usedRows1 = .Cells(.Rows.Count, "A").End(xlUp).Row
    usedCols1 = .Cells(2, .Columns.Count).End(xlToLeft).Column ' get the last column

    With .Range(.Cells(2, 31),.Cells(2, usedCols1))
        .AutoFill Destination:=.Range(.Cells(2, 31), .Cells(usedRows1, usedCols1)), Type:=xlFillDefault
    End With
End With

【讨论】:

@ScottCraner 是的,确实如此:) 这段代码结合使用来自 Jeeped 的 .filldown 正是我所需要的。其他人为 usedRows 变量编写了代码,我想我直到现在才完全理解它。非常感谢!【参考方案2】:

我真的不明白为什么这么多人使用 .AutoFill 而 .FillDown 或 FillRight 更合适。

with Sheets(twtsumsheet)
    usedRows1 = .Cells(.Rows.Count, "A").End(xlUp).Row
    usedCols1 = .Cells(2, .columns.count).End(xltoleft).column
    .Range(.Cells(2, 31), .Cells(usedRows1, usedCols1)).filldown
end with

【讨论】:

非常有帮助。谢谢!

以上是关于制作动态 VBA 自动填充范围的主要内容,如果未能解决你的问题,请参考以下文章

自动填充到vba中的命名范围

如何使用 VBA 动态自动填充目标?

如何自动填充公式 VBA

Excel VBA 自动填充目标

Excel VBA:自动填充公式的代码,无论左侧列的长度是多少(因此不需要指定范围)

VBA Excel - 自动填充方法超出范围类错误