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