通常,使用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。
答案 0 :(得分:4)
这个(没有数组公式)
=LOOKUP(2,1/(NOT(ISBLANK(A:A))),ROW(A:A))
它如何工作?
NOT(ISBLANK(A:A))
返回一个True
和False
1/(NOT(ISBLANK(A:A)))
,然后用1除以该数组将得到另一个1
或#DIV/0!
数组,该数组用作lookup_vector
2
用作lookup_value
,因为lookup_array
中的最大值是1
,所以找不到1
,因此查找将匹配其中的最后一个result_vector
数组。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