假设我有一个范围 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))) //返回行号