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

时间:2018-10-18 13:50:03

标签: excel vba excel-formula

通常,使用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:

enter image description here

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

2 个答案:

答案 0 :(得分:4)

这个(没有数组公式)

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

它如何工作?

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

答案 1 :(得分:1)

尝试以下公式:

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

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

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

其余代码仍然可以正常工作。

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