动态最后一行

时间:2018-04-16 21:46:35

标签: vba excel-vba excel

我正在使用以下代码查找Sheet1&中的最后一行Sheet 2中

Dim 1LastRow As Long
Dim 2LastRow As Long
1LastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
2LastRow = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row

这可以按照最初的预期运行,但我希望“1LastRow”能够调整以动态选取最后一行。

例如,如果Sheet1最初有50行,但在:

之后
Sheets("Sheet2").Range("B2:B" & 2LastRow).Copy
Sheets("Sheet1").Range("D2").PasteSpecial xlPasteValues 

Sheet1现在有55行。但是,“1LastRow”仍然假设Sheet1只有50行,因此当使用“1LastRow”时,在整个代码中会产生不一致。非常感谢任何输入!

2 个答案:

答案 0 :(得分:2)

嗯,变量不会神奇地更新自己。您会看到有代码粘贴行。当你做一些改变最后一行的事情时,只需重复设置最后一行变量的代码。

Dim 1LastRow As Long
Dim 2LastRow As Long
1LastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
2LastRow = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
Sheets("Sheet2").Range("B2:B" & 2LastRow).Copy
Sheets("Sheet1").Range("D2").PasteSpecial xlPasteValues 
1LastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

或者您可以使用带有

行公式的动态范围名称
=INDEX(Sheet1!$A:$A,COUNTA(Sheet1!$A:$A))

然后参考那个范围,如

ThisWorkbook.Worksheets("Sheet1").Range("OneLastRow").Row

但如果列包含空白单元格,则会失败。

答案 1 :(得分:1)

首先,您的代码不能在Office VBA环境中编译:变量名称不能以数字开头。因此,我们称之为LastRow1LastRow2,而不是

第二,即使有一些自动更新变量的方法,你的代码也会失败,因为你从Sheet2复制1列范围并从{{1}的单元格D2开始粘贴它},这对A列最后一行索引设置

没有任何影响

所有这一切,你可以使用Sheet1返回想要的行索引。

例如这个函数:

Function()

将返回Function LastRow1() As Long With Sheets("Sheet1") LastRow1 = .Cells(.Rows.Count, 4).End(xlUp).Row End With End Function 列D最后不是空行索引(好吧,如果列A完全为空,它实际上会失败,但它很容易修复)

只需更改Sheet1

中的列索引,就可以轻松地让它返回任何其他列而不是空单元格行索引

这样你的"主要"代码看起来像:

.Cells(.Rows.Count, 4)