大数跨境

分析=SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))来二个:=LOOKUP("座",A$2:A2)的逻辑推理过程怎么操作

分析=SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))来二个:=LOOKUP("座",A$2:A2)的逻辑推理过程怎么操作 浅谈出口账务和excel函数
2026-10-06
8
这两个公式本质都在做同一件事:把空单元格填充为“上方最近一个非空文本”。
区别是:

· SCAN 是 Excel 365 的动态数组公式,一次输出一整列结果。
· LOOKUP("座",A$2:A2) 是传统公式,需要下拉,每行扩大一次引用区域。

下面分别拆解。

---

一、=SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))

1. 函数结构

```excel
SCAN(初始值, 数组, LAMBDA(累加器x, 当前值y, 计算表达式))
```

你写的公式省略了初始值,所以是:

```excel
SCAN(, A2:A10, LAMBDA(x, y, IF(y>"", y, x)))
```

· x:累加器,保存“最近一次遇到的非空文本”。
· y:当前扫描到的单元格值。
· IF(y>"", y, x):
  · 如果当前单元格 y 有文本,就返回 y,同时累加器 x 更新为 y。
  · 如果当前单元格 y 为空,就返回累加器 x,也就是上一个非空文本。

2. 逻辑推理过程

假设 A 列数据如下:

行 A列
2 甲
3 空
4 乙
5 空
6 空
7 丙
8 空

SCAN 会逐行扫描:

当前行 y 当前值 x 累加器 判断 y>"" 返回
A2 甲 初始空 TRUE 甲
A3 空 甲 FALSE 甲
A4 乙 甲 TRUE 乙
A5 空 乙 FALSE 乙
A6 空 乙 FALSE 乙
A7 丙 乙 TRUE 丙
A8 空 丙 FALSE 丙

最终输出数组:

```text
甲
甲
乙
乙
乙
丙
丙
```

也就是:空单元格被上方最近的非空文本填满。

3. 操作方式

在 B2 输入:

```excel
=SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))
```

回车后,结果会自动溢出到 B2:B10。
需要 Excel 365 或 Excel 2021 以上版本支持 SCAN 和 LAMBDA。

4. 注意点

你原公式里用的是:

```excel
IF(y>"", y, x)
```

这个写法只适合文本。
如果 A 列里有数字,数字与空文本比较时,数字 > "" 会返回 FALSE,导致数字被当成空值。
更通用的写法是:

```excel
=SCAN(,A2:A10,LAMBDA(x,y,IF(y<>"",y,x)))
```

或者:

```excel
=SCAN(,A2:A10,LAMBDA(x,y,IF(y="",x,y)))
```

---

二、=LOOKUP("座",A$2:A2)

1. 函数结构

```excel
LOOKUP(查找值, 查找区域)
```

这里省略了第三个参数,所以返回的是查找区域中匹配到的值。

你写的公式:

```excel
=LOOKUP("座", A$2:A2)
```

· 查找值:"座"
· 查找区域:A$2:A2
· 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

区域逐行扩大。

2. 为什么用“座”?

LOOKUP 有一个特性:
如果找不到精确匹配值,它会返回小于等于查找值的最大值。

而“座”在中文排序中非常靠后,拼音是 zuo,通常大于绝大多数常用汉字。
所以:

```excel
LOOKUP("座", 某个区域)
```

就相当于说:

在这个区域里,找最后一个文本值。

因为“座”比所有普通汉字都大,LOOKUP 会一直向右找,最后落到最后一个文本上。

空单元格会被忽略,数字也会被忽略,所以它返回的是最后一个非空文本。

3. 逻辑推理过程

还是用刚才的数据:

行 A列
2 甲
3 空
4 乙
5 空
6 空
7 丙
8 空

在 B2 输入公式,然后下拉:

单元格 公式 查找区域 区域中最后一个文本 结果
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 丙 丙

最终 B 列结果和 SCAN 公式完全一样:

```text
甲
甲
乙
乙
乙
丙
丙
```

4. 操作方式

1. 在 B2 输入:

```excel
=LOOKUP("座",A$2:A2)
```

2. 回车。
3. 选中 B2,向下拖动填充柄,或双击填充柄。
4. B 列就会自动填充每个空单元格。

---

三、两个公式的核心区别

项目 SCAN 公式 LOOKUP("座",...) 公式
版本要求 Excel 365 / 2021+ 所有版本基本都支持
输出方式 一次输出整个数组 需要下拉填充
引用方式 直接引用 A2:A10 混合引用 A$2:A2 逐行扩大
原理 逐行扫描,累加器保存最近非空值 利用 LOOKUP 查找大于所有文本的“座”,返回最后一个文本
适合数据 文本 文本
数字处理 原公式 y>"" 会误判数字 数字会被忽略,只找文本

---

四、最终结论

· =SCAN(,A2:A10,LAMBDA(x,y,IF(y>"",y,x)))
    是动态数组写法,一次生成“空单元格填充上方最近非空文本”的结果。
· =LOOKUP("座",A$2:A2)
    是传统下拉写法,每行区域从 A2 扩展到当前行,利用“座”大于所有常用汉字,返回截止当前行的最后一个文本。

两者效果类似,但 SCAN 更现代、更灵活;LOOKUP 更经典、兼容性更好。
如果 A 列包含数字,建议把 SCAN 中的 y>"" 改成 y<>""。

【声明】内容源于网络
0
0
浅谈出口账务和excel函数
1234
内容 1583
粉丝 0
浅谈出口账务和excel函数 1234
总阅读30.0k
粉丝0
内容1.6k