分析=SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))来二个:=LOOKUP("座",A$2:A2)的逻辑推理过程怎么操作
浅谈出口账务和excel函数 这两个公式本质都在做同一件事:把空单元格填充为“上方最近一个非空文本”。
· SCAN 是 Excel 365 的动态数组公式,一次输出一整列结果。
· LOOKUP("座",A$2:A2) 是传统公式,需要下拉,每行扩大一次引用区域。
一、=SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))
SCAN(初始值, 数组, LAMBDA(累加器x, 当前值y, 计算表达式))
SCAN(, A2:A10, LAMBDA(x, y, IF(y>"", y, x)))
· 如果当前单元格 y 有文本,就返回 y,同时累加器 x 更新为 y。
· 如果当前单元格 y 为空,就返回累加器 x,也就是上一个非空文本。
当前行 y 当前值 x 累加器 判断 y>"" 返回
=SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))
需要 Excel 365 或 Excel 2021 以上版本支持 SCAN 和 LAMBDA。
如果 A 列里有数字,数字与空文本比较时,数字 > "" 会返回 FALSE,导致数字被当成空值。
=SCAN(,A2:A10,LAMBDA(x,y,IF(y<>"",y,x)))
=SCAN(,A2:A10,LAMBDA(x,y,IF(y="",x,y)))
这里省略了第三个参数,所以返回的是查找区域中匹配到的值。
· A$2:行号前有 $,表示起点固定在第 2 行。
· A2:行号前没有 $,表示终点会随着下拉而变化。
B2 =LOOKUP("座",A$2:A2) A2:A2
B3 =LOOKUP("座",A$2:A3) A2:A3
B4 =LOOKUP("座",A$2:A4) A2:A4
B5 =LOOKUP("座",A$2:A5) A2:A5
如果找不到精确匹配值,它会返回小于等于查找值的最大值。
而“座”在中文排序中非常靠后,拼音是 zuo,通常大于绝大多数常用汉字。
因为“座”比所有普通汉字都大,LOOKUP 会一直向右找,最后落到最后一个文本上。
空单元格会被忽略,数字也会被忽略,所以它返回的是最后一个非空文本。
B2 =LOOKUP("座",A$2:A2) A2:A2 甲 甲
B3 =LOOKUP("座",A$2:A3) A2:A3 甲 甲
B4 =LOOKUP("座",A$2:A4) A2:A4 乙 乙
B5 =LOOKUP("座",A$2:A5) A2:A5 乙 乙
B6 =LOOKUP("座",A$2:A6) A2:A6 乙 乙
B7 =LOOKUP("座",A$2:A7) A2:A7 丙 丙
B8 =LOOKUP("座",A$2:A8) A2:A8 丙 丙
项目 SCAN 公式 LOOKUP("座",...) 公式
版本要求 Excel 365 / 2021+ 所有版本基本都支持
引用方式 直接引用 A2:A10 混合引用 A$2:A2 逐行扩大
原理 逐行扫描,累加器保存最近非空值 利用 LOOKUP 查找大于所有文本的“座”,返回最后一个文本
数字处理 原公式 y>"" 会误判数字 数字会被忽略,只找文本
· =SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))
是动态数组写法,一次生成“空单元格填充上方最近非空文本”的结果。
是传统下拉写法,每行区域从 A2 扩展到当前行,利用“座”大于所有常用汉字,返回截止当前行的最后一个文本。
两者效果类似,但 SCAN 更现代、更灵活;LOOKUP 更经典、兼容性更好。
如果 A 列包含数字,建议把 SCAN 中的 y>"" 改成 y<>""。