我想在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
[结果]
答案 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)
这会自动更改相对引用以保持行的正确性。