MS Excel:获取列的最后一个单元格的内容,并自动更新

这是我的用例:

  • 在ws“Z”中,我希望一个特定的单元格为“C”列检索ws“A”中的最后一个(非空)单元格的内容。
  • 我还想,当我在ws“A”(例如列“C”)中添加一个新行时,ws“Z”中的单元格会自动更新。

更具体地说,ws“A”包含一个在“C”列中有修订号的历史表,当添加一个新条目时,我希望ws“Z”中的单元自动反映这个新值。

我正在考虑使用VBA编写一个公式。 所以我find了一些东西(最初是一个macros),我转换成了一个函数:

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 

使用Excel 2003,在ws“Z”,我有这个公式的单元格:

 =GetLastRow("A", "C") 

但是我有两个问题。 虽然它成功获取列“C”的最后一个单元格的内容:

  • 公式不会得到ws“A”中的那个,而是现在ws中的那个(即“Z”)。
  • 每当我在ws“A”中添加一个新条目时,ws“Z”中的单元格根本不会被更新(即使强制重新计算)。

我可以更新单元格的唯一方法就是在上面inputEnter! 8V |

此外,我试图直接在公式中硬编码工作表名称,但它仍然提取当前ws中的最后一个单元格… 8v(

难道我做错了什么? 或者,也许我应该采取另一种方式?

如果能帮助我获得这个用例,我将不胜感激。 谢谢。

正如L42指出的,问题是Cells(65536, MyRange.Column).End(xlUp).Value引用它在单元格65536和“C列”从“MyRange”

这是你的函数的工作版本:

 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))只需要调整一下范围。 使用macros有点矫枉过正,除非在C列中有空白行,那么我不会发现任何需要使用macros。

我发现如何自动更新function(用例的第二部分):我必须添加

 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 

也有一个去这个这是一个很好的阅读 。 HTH