获取某个范围的第一个值和最后一个值

获取某个范围的第一个值和最后一个值

假设我有一个范围 A1:A27,并且该范围包含空值和非空值,我想要两个函数:一个用于获取范围内的第一个非空值,一个用于获取范围内的最后一个非空值,就像这样。

=First(A1:A27)
=Last(A1:A27)

范围将只是一维数组。

我将不得不在我的工作表中做很多这样的实例,因此应用程序脚本将因效率低下而无法使用。

您将如何编写这些函数?

答案1

我们可以用它来找到范围内的第一个非空值:

=INDEX(A1:A27, MATCH(TRUE, A1:A27<>"", 0))

我们可以用它来找到范围内的最后一个非空值:

=INDEX(A1:A27, MAX(IF(A1:A27<>"", ROW(A1:A27))))

答案2

TOCOL 函数

如果您只查找值,TOCOL 将删除空白,您可以使用 INDEX 获取第一个值,对于最后一个值执行相同操作,但按行降序排序:

# 获取第一个值 
=INDEX(TOCOL(A1:A27,1),1)

# 获取最后一个值 
=INDEX(TOCOL(SORT(A1:A27,ROW(A1:A27),0),1),1)

XMATCH 函数

XMATCH 函数对于此应用程序来说,它比 MATCH 有优势,因为它支持从头到尾和从尾到头的搜索。

# 句法 
=XMATCH(搜索键,查找范围,[匹配模式],[搜索模式])

XMATCH 示例

第一个值语法与 MATCH 类似,但exact_match=0是默认的,所以可以省略。

# 第一个值 
=INDEX(A1:A27, XMATCH(TRUE, A1:A27<>“”))      
=ROW(INDEX(A1:A27,XMATCH(TRUE,A1:A27<>“”))) //返回行号

XMATCH 通过指定支持从后到先搜索search_mode=-1

# 最后值 
=INDEX(A1:A27, XMATCH(TRUE, A1:A27<>“",,-1))
=ROW(INDEX(A1:A27,XMATCH(TRUE,A1:A27<>“",,-1))) //返回行号

相关内容