繁体   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