我只是想知道你是否能帮助我更好地理解.Cells(.Rows.Count,"A").End(xlUp).row
的作用。我理解.End
部分之前的部分。
答案 0 :(得分:41)
它用于查找工作表中包含数据的行数(#34; A")。完整用法是
lastRowIndex = ws.Cells(ws.Rows.Count, "A").End(xlUp).row
其中ws
是Worksheet对象。在问题示例中,隐含声明该声明位于With
块
With ws
lastRowIndex = .Cells(.Rows.Count, "A").End(xlUp).row
End With
ws.Rows.Count
返回工作表中的总行数(Excel 2010中的1048576)。.Cells(.Rows.Count, "A")
返回列中最底部的单元格" A"在工作表中然后是End
方法。 documentation对于它的作用含糊不清。
返回一个Range对象,该对象表示包含源范围
的区域末尾的单元格
特别是它没有定义什么是"区域"是。我的理解是一个区域是一个连续的非空细胞范围。因此,预期的用法是从区域中的单元格开始,并从原始单元格中找到该区域中该方向上的最后一个单元格。但是,当你不这样使用它时有多个例外:
rng.cells(1,1)
区域。 所以Range.End
不是一个微不足道的功能。
.row
返回该单元格的行索引。答案 1 :(得分:18)
[A1].End(xlUp)
[A1].End(xlDown)
[A1].End(xlToLeft)
[A1].End(xlToRight)
是VBA相当于在单元格A1中并按 Ctrl +任何箭头键。它将继续朝着那个方向前进,直到它到达最后一个数据单元,或者如果你使用这个命令从一个 的单元格中移动它将会到达下一个数据的最后一个单元格。包含数据的单元格。
如果要查找A列中最后一个“已使用”的单元格,可以转到A65536(例如,在XL93-97工作簿中)并按Ctrl +向上“捕捉”到上次使用的单元格。或者在VBA中你会写:
Range("A65536").End(xlUp)
出于兼容性原因,可以将其重新编写为Range("A" & Rows.Count).End(xlUp)
,以及具有不同行数的工作簿。
答案 2 :(得分:8)
第一部分:
.Cells(.Rows.Count,"A")
将您发送到A列的底行,您已经知道了。
End函数从一个单元格开始,然后根据你告诉它的方向,朝着那个方向前进,直到它到达一组有文本的单元格的边缘。这意味着,如果单元格C4:E4中有文本,则键入:
Sheet1.Cells(4,"C").End(xlToRight).Select
程序将选择E4,即最右边的单元格,其中包含文本。
在你的情况下,代码正在吐出最后一个单元格的行,其中包含A列中的文本。这有帮助吗?