范围自动填充一行,最好只使用变量

Posted

技术标签:

【中文标题】范围自动填充一行,最好只使用变量【英文标题】:Range Autofill one row down only using variable preferrably 【发布时间】:2020-01-21 07:22:03 【问题描述】:

我只想选择从 B 到 Z 的最后一行(这是唯一包含公式的行。) 此范围应仅向下自动填充一行并仅生成倒数第二行的值(即删除公式)。所以最后一行应该总是有公式。

如下所示的数据集:

    A B C ..... Z
1   1 2 2 ......26
2   1 2 2 ......26
3   1 2 2 ......26
4   1 2 2 ......26
5   1 2 2 ......26

所以代码应该从 B5:Z5 中选择并自动填充一行。

我尝试了以下代码,但它给了我一个运行时错误。

Sub autofilllastrow()

Dim Lastrow As Integer
Dim Lastrange As Range


Lastrow = ActiveWorkbook.Worksheets("sheet1").Cells(Rows.Count, 2).End(xlUp).Row

Range("B" & Lastrow, "Z" & Lastrow).Select

Lastrange.AutoFill Destination:=Range("B" & Lastrow + 1, "Z" & Lastrow + 1)


End Sub

我应该如何正确定义目标部分并只设置倒数第二行的值?

【问题讨论】:

你从来没有给Lastrange分配任何东西,所以它保持Nothing,这会给你一个运行时错误 对,我忘了给 Lastrange 赋值。 【参考方案1】:
Sub autofilllastrow()

Dim lr As Long

With ThisWorkbook.Worksheets("Sheet1")
    lr = .Cells(.Rows.Count, 2).End(xlUp).Row
    .Range(.Cells(lr + 1, 2), .Cells(lr + 1, 26)).FillDown
    .Range(.Cells(lr, 2), .Cells(lr, 26)).Value = .Range(.Cells(lr, 2), .Cells(lr, 26)).Value
End With

End Sub
不使用.Select 使用Long 数据类型而不是Integer FillDown 而不是 AutoFill

或者,如果您热衷于设置 Range 变量:

Sub autofilllastrow()

Dim lr As Long, rng As Range

With ThisWorkbook.Worksheets("Sheet1")
    lr = .Cells(.Rows.Count, 2).End(xlUp).Row
    Set rng = .Range(.Cells(lr, 2), .Cells(lr, 26))
    rng.Offset(1).FillDown
    rng.Value = rng.Value
End With

End Sub

【讨论】:

非常感谢!这完美地工作。它看起来很简单,至少对你来说 :) 只是一个问题,你为什么使用 Long 而不是 Integer? Lr 只返回一个行号。 @purpleblau,因为Integer 根本没用。 Long 数据类型可以做任何Integer 做的事情,但“更好”。这意味着它更防错,因为Integer 可以更容易地溢出。所以我的建议是你应该养成使用Long 的习惯。 顺便说一句,很高兴它对你有用 =)。考虑接受作为回报的答案。 你打赌,人情归来,非常感谢。该行号在 Excel 中只是从 1 到 1Mio。在我看来,使用 Long 有点矫枉过正,它需要更多的内存。只是我的 2 美分。

以上是关于范围自动填充一行,最好只使用变量的主要内容,如果未能解决你的问题,请参考以下文章

通过将活动单元格的范围提供给列的最后一行来显示自动填充命令范围中的错误

Excel VBA 自动填充问题

范围类上的自动填充错误

从范围中选择最大数值并自动填充

自动填充范围到最后使用的行

运行代码时,它返回 - 范围类的自动填充方法在代码的最后一行失败:VBA