自动填充的宏

时间:2015-11-18 17:44:52

标签: excel excel-vba autofill vba

我想在P中创建一个名为Age of Ticket的列。它正在计算两个日期,然后自动填充。此宏将用于更改行数的报表。当我使用它时,它基本上是在P2上进行计算,然后它在P1上进行计算(标签所在的位置)并且不进行自动填充。

Dim LastRow As Long

LastRow = Range("P65000").End(xlUp).Row

Range("P1").Select
ActiveCell.FormulaR1C1 = "Age of Ticket"
Range("P2").Select
ActiveCell.FormulaR1C1 = "=RC[-5]-RC[-8]"
Range("P2").Select
Selection.AutoFill Destination:=Range("P2:P" & LastRow)
Range("P2:P3000").Select
ActiveWindow.SmallScroll Down:=210

[结果]

enter image description here

1 个答案:

答案 0 :(得分:5)

问题是添加的列是空的。所以你的代码告诉excel转到P65000并模仿 ctrl - upArrow 。这将找到具有值的第一个单元格,但由于没有值,它在顶部单元格P1处停止,因此LastRow = 1.因此填充区域为P2:P1。使用包含数据的列。我使用了K列,因为它在你的公式中。

这是使用Record宏并尝试清理的一个很好的例子。清理代码时,一个重点应该是摆脱.Select。请参阅here以获取不使用.Select

引用范围的方法的精彩汇编

使用.FormulaR1C1时,可以一次设置整个范围,也不需要填写。

将上述代码更改为:

Dim LastRow As Long

 LastRow = Range("K65000").End(xlUp).Row

Range("P1").value = "Age of Ticket"
Range("P2:P" & LastRow).FormulaR1C1 = "=RC[-5]-RC[-8]"

此外,如果您想使用自动填充,则无需使用r1c1公式。

Range("P2").Formula = "=K2-H2"
Range("P2").AutoFill Destination:=Range("P2:P" & LastRow)

这会自动更改相对引用以保持行的正确性。