我想获取某个范围的最后一行号,但该范围是动态的。
我无法使用命名范围,因为有时电子表格中定义的范围会发生变化。例如,今天命名范围可能有 50 行,明天可能就有 51 行。据我所知,命名范围不会自行修改。
我需要类似这样的内容,获取 A:A = 'stack' 的最后一行。
尝试做类似的事情,https://www.excel-easy.com/examples/dynamic-named-range.html,实施起来有困难。
任何帮助,将不胜感激。
答案1
在包含文本的列中,您可以使用此公式找到具有特定值的最后一行。这是一个数组公式,必须使用 Ctrl+Shift+Enter 进行确认
=MAX((A1:A100="stack")*(ROW(A1:A100)))
参见下方屏幕截图中的单元格 C1。
您可以将这个函数用于动态范围名称。此公式始终从 A1 开始范围,一直到最后一个包含文本“stack”的单元格:
=OFFSET(Sheet1!$A$1,0,0,MAX((Sheet1!$A$1:$A$100="stack")*(ROW(Sheet1!$A$1:$A$100))),1)
在名称管理器中,您不需要使用 Ctrl+Shift+Enter,因为所有命名公式都会自动评估为数组公式。如果您使用此方法,最好限制公式中的行数,并且不要使用整列引用。
请注意屏幕截图中围绕当前范围的行进蚂蚁。
如果您想要包含直到最后一行的所有带有文本的行,那么您可以使用更简单的公式。
=OFFSET(Sheet1!$A$1,0,0,MATCH("zzzzz",Sheet1!$A:$A,1),1)
使用 Match,您可以使用整列引用。
答案2
假设您的第一个单元格永远不会改变,并且假设它是"A1"
。为此,您应该使用如下代码片段:
private function get_last_row(byref ws as worksheet, optional byval letter_of_first_col as string = "A", optional byval index_of_first_row as interger = 1) as long
with ws
get_last_row = .range(letter_of_first_row & index_of_first_row).currentRegion.rows.count + (index_of_first_row - 1)
end with
end function
希望这对你有帮助