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

rmd*_*dlp 28 excel vba excel-vba

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

che*_*eak 43

它用于查找包含"A"列中数据的工作表中包含数据的行数.完整用法是

 lastRowIndex = ws.Cells(ws.Rows.Count, "A").End(xlUp).row
Run Code Online (Sandbox Code Playgroud)

wsWorksheet对象在哪里.在问题示例中,暗示声明在一个With块内

With ws
    lastRowIndex = .Cells(.Rows.Count, "A").End(xlUp).row
End With
Run Code Online (Sandbox Code Playgroud)
  1. ws.Rows.Count 返回工作表中的总行数(Excel 2010中的1048576).
  2. .Cells(.Rows.Count, "A") 返回工作表中"A"列中最底部的单元格

然后是End方法.该文件是模糊的,以它做什么.

返回一个Range对象,该对象表示包含源范围的区域末尾的单元格

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

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

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

  1. .row 返回该单元格的行索引.


Sam*_*Sam 22

[A1].End(xlUp)
[A1].End(xlDown)
[A1].End(xlToLeft)
[A1].End(xlToRight)
Run Code Online (Sandbox Code Playgroud)

是VBA相当于在单元格A1中并按Ctrl+任意箭头键.它会继续朝着这个方向行进,直到它击中数据的最后一个单元格,或者如果你使用这个命令从一个细胞移动它将行进,直到它命中包含数据的下一个单元格数据的最后一个单元格.

如果要查找A列中的最后一个"已使用"单元格,可以转到A65536(例如,在XL93-97工作簿中)并按Ctrl +向上"捕捉"到上次使用的单元格.或者在VBA中你会写:

Range("A65536").End(xlUp)Range("A" & Rows.Count).End(xlUp)对于具有不同行数的工作簿,出于兼容性原因,这也可以重写.


小智 9

第一部分:

.Cells(.Rows.Count,"A")
Run Code Online (Sandbox Code Playgroud)

将您发送到A列的底行,您已经知道了.

End函数从一个单元格开始,然后根据您告诉它的方向,朝向该方向,直到它到达一组具有文本的单元格的边缘.意思是,如果单元格C4:E4中有文本,则键入:

Sheet1.Cells(4,"C").End(xlToRight).Select
Run Code Online (Sandbox Code Playgroud)

程序将选择E4,最右边的单元格中包含文本.

在您的情况下,代码正在吐出最后一个单元格的行,其中包含A列中的文本.这有帮助吗?