【问题标题】:Get the last row of a column in Excel, without VBA获取Excel中一列的最后一行,没有VBA
【发布时间】:2018-10-18 13:50:02
【问题描述】:

一般来说,在 Excel 中获取给定列的最后一行很容易使用 VBA 中的用户定义函数完成:

Function lastRow(wsName As String, Optional columnToCheck As Long = 1) As Long
    Dim ws As Worksheet
    Set ws = Worksheets(wsName)
    lastRow = ws.Cells(ws.Rows.Count, columnToCheck).End(xlUp).Row
End Function

对于最后一行,到目前为止我发现了两个 excel 公式:

  • =SUMPRODUCT(MAX((A:A<>"")*ROW(A:A)))
  • =MAX(IFERROR(MATCH(E1+99,A:A),0),IFERROR(MATCH("zzz",A:A),0))

问题是第一个不起作用,如果范围内有错误,第二个不返回真正的最后一行,如果是错误,但最后一个非错误行,因此返回 6 而不是 7:

问题是如何得到一个返回 7 的公式,因为这是 A 列中使用的最后一行?虽然,这是一个错误。没有 VBA。

【问题讨论】:

  • =MAX(IFERROR(A:A<>"",1)*ROW(A:A)) 但它是一个数组公式。
  • @ScottCraner - 是的,看起来效果很好。有没有机会避免 ctrl+shift 部分?
  • 这就是为什么我把它放在评论中,不认为你想要那个需要。但看起来你得到了答案。

标签: excel vba excel-formula


【解决方案1】:

这个(没有数组公式)

=LOOKUP(2,1/(NOT(ISBLANK(A:A))),ROW(A:A)) 

它是如何工作的?

  1. NOT(ISBLANK(A:A)) 返回一个由 TrueFalse 组成的数组
  2. 1/(NOT(ISBLANK(A:A))) 然后 1 除以该数组得到另一个数组 1#DIV/0! 用作 lookup_vector
  3. 我们将2 用作lookup_value,因为lookup_array 中的最大值是1,所以无法找到它,因此查找将匹配数组中的最后一个1
  4. 作为result_vector,我们使用ROW(A:A)获取最后使用的单元格的行号
    (或者使用A:A 来获取值而不是行号)。

【讨论】:

  • 甚至=IFERROR(LOOKUP(2,1/(NOT(ISBLANK(A:A))),ROW(A:A)),0),使其在没有值的情况下工作:)
  • 相当不错。顺便说一句,找到了一篇相当不错的文章,甚至给出了价值 - exceljet.net/formula/get-value-of-last-non-empty-cell
  • 取值更简单,您只需省略ROW 部分:=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)
  • @YasserKhalil 使用 =SUMMENPRODUKT((MAX(WENNFEHLER(((A:C)<>"");WAHR)*ZEILE(A:A)))) 查找 A 到 C 列中最后使用的行。使用 ctrl+shift+enter 将公式添加为数组公式。请注意,这会使您的工作表变慢,因为必须使用 sumproduct 进行大量计算。 VBA 在这里会更快。
  • @YasserKhalil 对不起我的错:=SUMPRODUCT((MAX(IFERROR(((A:C)<>"");TRUE)*ROW(A:A)))) • 也可以试试=MAX(IFERROR(A:C<>"",1)*ROW(A:A)) 这应该也可以,而且可能更快。
【解决方案2】:

试试下面的公式:

=SUMPRODUCT((MAX(IFERROR(((A:A)<>"");TRUE)*ROW(A:A))))

记住这个公式需要用control+shift+enter输入。

(A:A) &lt;&gt; "":检查非空单元格,如果不为空则返回TRUE
(IFERROR(((A:A)&lt;&gt;"");TRUE):检查非空单元格,如果不为空则返回TRUE,如果检测到错误,它也会返回TRUE.

其余代码和以前一样工作。

关于 control+shift+enter 组合的更多信息可以在这里找到:Guidelines and examples of array formulas

【讨论】:

  • 嗨劳伦斯,谢谢你的回答。这看起来与@Scott Craner 的 cmets 中的公式非常相似,只是用=SUMPRODUCT() 使它复杂了一点。
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
相关资源
最近更新 更多