【问题标题】:Meaning of .Cells(.Rows.Count,"A").End(xlUp).row.Cells(.Rows.Count,"A").End(xlUp).row 的含义
【发布时间】:2018-03-28 04:19:38
【问题描述】:

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

【问题讨论】:

  • 给定一个With 某个范围对象我猜?
  • .end 之前,它会转到A 列的最后一个可能的单元格(所以我猜是A65535),然后.end(xlup) 会返回直到找到除空白单元格以外的其他内容,最后.row 给出了这个单元格的行

标签: vba excel


【解决方案1】:

它用于查找包含“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”列中最底部的单元格

然后是End 方法。 documentation 的作用不明确。

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

特别是它没有定义“区域”是什么。我的理解是一个区域是一个连续的非空单元格范围。所以预期的用法是从一个区域中的一个单元格开始,从原始单元格的那个方向找到该区域中的最后一个单元格。但是,当您不这样使用它时,有多种例外情况:

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

所以Range.End 不是一个微不足道的函数。

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

【讨论】:

    【解决方案2】:
    [A1].End(xlUp)
    [A1].End(xlDown)
    [A1].End(xlToLeft)
    [A1].End(xlToRight)
    

    是在单元格 A1 中并按 Ctrl + 任意箭头键的 VBA 等效项。它将继续沿该方向行进,直到它到达最后一个数据单元,或者如果您使用此命令从一个 最后一个数据单元的单元移动,它将行进直到它到达下一个数据单元包含数据的单元格。

    如果您想在 A 列中找到最后一个“使用”的单元格,您可以转到 A65536(例如,在 XL93-97 工作簿中)并按 Ctrl + Up 以“捕捉”到最后一个使用的单元格。或者在 VBA 中你会写:

    Range("A65536").End(xlUp) 再次可以重写为 Range("A" & Rows.Count).End(xlUp) 以在具有不同行数的工作簿之间实现兼容性。

    【讨论】:

      【解决方案3】:

      第一部分:

      .Cells(.Rows.Count,"A")
      

      将您发送到您已经知道的 A 列的底行。

      End 函数从一个单元格开始,然后,根据您告诉它的方向,向那个方向移动,直到它到达一组包含文本的单元格的边缘。意思是,如果您在单元格 C4:E4 中有文本并且您输入:

      Sheet1.Cells(4,"C").End(xlToRight).Select
      

      程序将选择 E4,即最右边的带有文本的单元格。

      在您的情况下,代码会在 A 列中吐出最后一个带有文本的单元格的行。这有帮助吗?

      【讨论】:

        【解决方案4】:
        .Cells(.Rows.Count,"A").End(xlUp).row
        

        我认为括号中的第一个点不应该在那里,我的意思是,你应该这样写:

        .Cells(Rows.Count,"A").End(xlUp).row
        

        在单元格之前,您可以写下您的工作表名称,例如:

        Worksheets("sheet1").Cells(Rows.Count, 2).End(xlUp).row
        

        对同一个工作表进行操作时,工作表名称不是必需的。

        【讨论】:

          猜你喜欢
          • 2016-01-12
          • 1970-01-01
          • 1970-01-01
          • 2020-05-12
          • 2022-01-21
          • 1970-01-01
          • 1970-01-01
          • 2021-06-24
          相关资源
          最近更新 更多