簡體   English   中英

MS Excel:獲取列的最后一個單元格的內容並使其自動更新

[英]MS Excel: Getting content of last cell of a column and make it update automatically

這是我的用例:

  • 在ws“ Z”中,我希望給定的單元格檢索ws“ A”中列“ C”的最后一個(非空)單元格的內容。
  • 我還想在ws“ A”中添加新行(例如,列“ C”)時,ws“ Z”中的單元格會自動更新。

更具體地說,ws“ A”在“ C”列中包含帶有修訂號的歷史表,並且當添加新條目時,希望ws“ Z”中的單元格能夠自動反映該新值。

我正在考慮使用要在VBA中編寫的公式。 所以在SO的某個地方,我發現了一些東西(最初是宏),我將其轉換為函數:

Function GetLastRow(strSheet, strColum) As String

Dim MyRange As Range

Set MyRange = Worksheets(strSheet).Range(strColum & "1")

GetLastRow = Cells(65536, MyRange.Column).End(xlUp).Value

End Sub

在ws“ Z”中使用Excel 2003,我得到了具有以下公式的單元格:

=GetLastRow("A", "C")

但是我有兩個問題。 盡管它成功獲取了列“ C”的最后一個單元格的內容:

  • 該公式不會得到ws“ A”中的一個,而是當前ws中的一個(即“ Z”)。
  • 每當我在ws“ A”中添加新條目時,ws“ Z”中的單元格根本不會得到更新(即使在強制重新計算時)。

我可以更新單元格的唯一方法是在其上鍵入Enter! 8v |

我也嘗試直接在公式中對工作表名稱進行硬編碼,但它仍會獲取當前ws中的最后一個單元格。8v(

難道我做錯了什么? 或者,也許我應該另辟?徑?

如果您能幫助我使此用例正常工作,將不勝感激。 謝謝。

正如L42之前指出的那樣,問題出在Cells(65536, MyRange.Column).End(xlUp).Value您在65536單元格和“ MyRange”中的“ C Column”中引用了它

這是您的函數的工作版本:

Function GetLastRow(strSheet, strColum) As String

Dim MyRange As Range

GetLastRow = Worksheets(strSheet).Range(strColum & "1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp)

End Function

但說實話,我更喜歡使用此公式INDEX(A!$C:$C,COUNT(A!$C:$C))只需要稍微調整一下范圍。 使用宏有點矯kill過正,除非您在C列中有空白行,否則我不認為需要使用宏。

我發現了如何使函數自動更新(用例的第二部分):我必須添加

Application.Volatile

在功能的身體中。 所以這是我現在使用的版本:

Function GetLastRowValue(strSheet, strColum) As String

   Application.Volatile

   Dim MyRange As Range

   GetLastRowValue = Worksheets(strSheet).Range(strColum & "1").Offset(Sheet1.Rows.Count - 1, 0).End(xlUp)

End Function

感謝所有的幫助。

Milanor已經回答了它,但是讓我使用Cells顯式地重寫您的Function

Function GetLastRow(strSheet, strColum) As String
    With Sheets(strSheet)
        GetLastRow = .Cells(.Rows.Count, strcolum).End(xlUp).Row
    End With
End Function

也可以讀一讀這本書 高溫超導

我正在尋找類似的東西,這對我有用:

  1. 構建使用列中的值獲取最后一行的函數:
Function LastRow(ws As String, rng As String)

        On Error Resume Next

         LastRow = Sheets(ws).Range(rng).Find(What:="*", _
                                After:=Sheets(ws).Range(rng).Cells(1), _
                                Lookat:=xlPart, _
                                LookIn:=xlFormulas, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlPrevious, _
                                MatchCase:=False).Value

        On Error GoTo 0

End Function
  1. 在工作表“ Z”中輸入例程,因此每次激活工作表時都會更新該功能:
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Application.CalculateFullRebuild

End Sub
  1. 輸入工作表Z的公式y單元格= LastRow(“ A”,“ C:C”)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM