繁体   English   中英

在没有VBA的情况下获取Excel中列的最后一行

[英]Get the last row of a column in Excel, without VBA

通常,使用VBA中的用户定义函数可以轻松完成Excel中给定列的最后一行:

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。

这个(没有数组公式)

=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 ,所以找不到它,因此lookup将匹配数组中的最后1
  4. 作为result_vector我们使用ROW(A:A)来获取最后使用的单元格的行号
    (或者使用A:A来获取值而不是行号)。

请尝试以下公式:

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

请记住 ,需要使用control + shift + enter输入此公式。

(A:A) <> "" :检查非空单元格,如果不为空,则返回TRUE
(IFERROR(((A:A)<>"");TRUE) :检查非空单元格,如果不为空,则返回TRUE如果检测到错误,则也返回TRUE

其余代码仍然像以前一样工作。

有关控制 + Shift + Enter组合的更多信息,可以在这里找到: 数组公式的准则和示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM