【问题标题】:Macro to Autofill自动填充宏
【发布时间】:2016-02-20 14:06:45
【问题描述】:

我想在 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

[结果]

【问题讨论】:

    标签: excel autofill vba


    【解决方案1】:

    问题是添加时的列是空的。所以你的代码告诉 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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-25
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多