如何自动填充活动单元格的列直到最后一行

Posted

技术标签:

【中文标题】如何自动填充活动单元格的列直到最后一行【英文标题】:How to auto fill the column of the active cell till the last row 【发布时间】:2020-04-29 09:29:12 【问题描述】:

尝试执行以下代码:

ActiveCell.Offset(1, 0).Select 'Noting but F2





  ActiveCell.FormulaR1C1 = "=LEFT(RC[-1],4)"





' find last row with data in column "A"

lastRow = Cells(Rows.Count, "A").End(xlUp).Row



' copying the formula from "F2" all the way to the last cell

ActiveCell.AutoFill Destination:=Range(ActiveCell.EntireColumn & lastRow), Type:=xlFillDefault

它给出了一个错误,说类型不匹配。

但是当我尝试时:

ActiveCell.AutoFill Destination:=Range("F2:F" & lastRow), Type:=xlFillDefault

它工作正常,但我不希望 F2:F 在那里,因为我不知道将来会出现哪一列。

【问题讨论】:

你应该阅读这个***.com/questions/10714251/… Range(ActiveCell.EntireColumn & lastRow) 没有意义。 嗯,我们可以使用什么来代替它或“F2:F”,因为列号在实际执行时将是未知的。只有事情会相同,即标题(第 1 行中的值)。 @SJR 使用cells(2,activecell.column)cells(lastrow,activecell.column)。活动单元格必须在目标范围内。 也就是说,您可以一次性应用公式,无需自动填充。 【参考方案1】:

要回答您的问题,您没有指定正确的范围。如您所说,可以指定一个简单的范围

    使用字符串格式Range("A1:B4"),其中A1B4 是范围的两个对角。

    使用两个角作为单元格,例如Range( Cells(1,1), Cells(4,2) ) 其中Cells(1,1)A1Cells(4,2)B4

所以你可以写

ActiveCell.AutoFill Destination:=Range(Cells(2, ActiveCell.Column), Cells(lastRow, ActiveCell.Column)), Type:=xlFillDefault

为了达到您的目标,您也可以避免使用自动填充。 FormulaR1C1 格式允许您使用“相对”单元格偏移/地址编写公式。因此,在自动填充之后,desired 列中的所有单元格都将具有相同的 FormulaR1C1。 然后您可以避免使用自动填充并为整个列手动设置相同的 FormulaR1C1。

所以你可以写一个更简单的代码:

lastRow = Cells(Rows.Count, "A").End(xlUp).Row
Range(Cells(1, ActiveCell.Column), Cells(lastRow, ActiveCell.Column)).FormulaR1C1 = "=LEFT(RC[-1],4)"

【讨论】:

以上是关于如何自动填充活动单元格的列直到最后一行的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 如何自动填充到底部,直到最后一个 B 单元格包含数据

EXCEL中如何改变活动单元格

应用公式,然后自动填充数据,直到列中的最后一个可见单元格:VBA

尝试自动填充到最后一行数据

如何让自动填充在 VBA 中工作?

如何自动填充命名单元格?