簡體   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