范围自动填充一行,最好只使用变量
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 美分。以上是关于范围自动填充一行,最好只使用变量的主要内容,如果未能解决你的问题,请参考以下文章