.Cells的意思(.Rows.Count," A")。结束(xlUp).row

时间:2014-11-21 16:20:22

标签: vba excel-vba excel

我只是想知道你是否能帮助我更好地理解.Cells(.Rows.Count,"A").End(xlUp).row的作用。我理解.End部分之前的部分。

3 个答案:

答案 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
  1. ws.Rows.Count返回工作表中的总行数(Excel 2010中的1048576)。
  2. .Cells(.Rows.Count, "A")返回列中最底部的单元格" A"在工作表中
  3. 然后是End方法。 documentation对于它的作用含糊不清。

      

    返回一个Range对象,该对象表示包含源范围

    的区域末尾的单元格

    特别是它没有定义什么是"区域"是。我的理解是一个区域是一个连续的非空细胞范围。因此,预期的用法是从区域中的单元格开始,并从原始单元格中找到该区域中该方向上的最后一个单元格。但是,当你不这样使用它时有多个例外:

    • 如果范围是多个单元格,则它将使用rng.cells(1,1)区域。
    • 如果范围不在某个区域中,或者该范围已经在该区域的末尾,那么它将沿着该方向行进,直到它进入一个区域并返回该区域中第一个遇到的单元格。
    • 如果遇到工作表的边缘,它将返回该工作表边缘的单元格。

    所以Range.End不是一个微不足道的功能。

    1. .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列中的文本。这有帮助吗?