# Excel LAMBDA 可复用函数教程

来源文章：How-To Geek — *How to use LAMBDA in Excel to create scalable, reusable functions*  
原文链接：https://www.howtogeek.com/microsoft-excel-lambda-reusable-functions/  
整理目的：把文章内容提炼成可直接照做的中文教程。

> 提取说明：原网页正文提取存在截断，本文基于已提取正文与搜索索引补全文段整理，不是逐字翻译。

## 1. 什么时候该用 LAMBDA

如果你在 Excel 里反复复制同一段公式，尤其是这些公式里包含业务规则，比如税率、利润率、手续费、阈值、状态判断，就适合考虑 LAMBDA。

常见问题：

- 同一段公式被复制到多个工作表或多张表。
- 某个公式引用范围被复制错了。
- 业务规则变了，只改了部分公式，其他地方漏改。
- 结果不一致，但表面上看不出哪里错。
- 排查时要在多个表、多个列之间来回找公式。

LAMBDA 的核心作用是：**把公式逻辑定义一次，命名后像内置函数一样反复调用。**

## 2. LAMBDA 的基本语法

基本格式：

```excel
=LAMBDA(parameter1, parameter2, ..., calculation)
```

简单例子：

```excel
=LAMBDA(x, x*1.2)
```

这里：

- `x` 是参数，也就是之后传入的值。
- `x*1.2` 是计算逻辑。

注意：如果只在单元格里输入上面的公式，Excel 会返回 `#CALC!`，因为你只是定义了函数，还没有给它输入值。

测试 LAMBDA 时，可以在后面直接加参数：

```excel
=LAMBDA(x, x*1.2)([@Price])
```

这表示：先定义一个把 `x` 乘以 `1.2` 的函数，再立刻用当前行的 `Price` 作为输入调用它。

## 3. 把 LAMBDA 变成可复用函数

LAMBDA 真正有用的方式，是把它保存到 Excel 的名称管理器里。

操作步骤：

1. 打开 Excel。
2. 进入 `Formulas` 选项卡。
3. 点击 `Name Manager`。
4. 也可以直接按快捷键 `Ctrl + F3`。
5. 点击 `New`。
6. 在 `Name` 里输入函数名。
7. 在 `Refers to` 里输入 LAMBDA 公式。
8. 保存后，就可以像调用内置函数一样使用它。

例如你创建了一个叫 `ADD_TAX` 的函数，以后就可以这样写：

```excel
=ADD_TAX([@Price])
```

这比在每个单元格里复制完整公式更容易维护。

## 4. 示例一：计算含利润和手续费的标价

场景：你有一列成本价，希望按以下规则计算标价：

- 加 25% 利润率。
- 再加 5 美元处理费。

假设：

- 单元格 `B2` 命名为 `Margin`，值为 `25%`。
- 单元格 `B3` 命名为 `HandlingFee`，值为 `5`。

创建 LAMBDA：

1. 打开 `Name Manager`。
2. 新建名称：

```text
GET_LIST_PRICE
```

3. 在 `Refers to` 中输入：

```excel
=LAMBDA(cost, (cost * (1 + Margin)) + HandlingFee)
```

4. 在表格的标价列中使用：

```excel
=GET_LIST_PRICE([@Cost])
```

效果：

- 如果利润率从 `25%` 改成 `30%`，只需要改 `Margin`。
- 如果手续费从 `$5` 改成 `$7`，只需要改 `HandlingFee`。
- 所有调用 `GET_LIST_PRICE` 的地方都会自动更新。

适用场景：价格表、报价模型、成本测算、佣金计算。

## 5. 示例二：清洗姓名格式

场景：导入联系人名单时，姓名经常有这些问题：

- 前面有多余空格。
- 后面有多余空格。
- 大小写不统一。

目标：把姓名统一成规范格式。

创建 LAMBDA：

1. 打开 `Name Manager`。
2. 新建名称：

```text
CLEAN_NAME
```

3. 在 `Refers to` 中输入：

```excel
=LAMBDA(text, PROPER(TRIM(text)))
```

4. 在表格中使用：

```excel
=CLEAN_NAME([@Name])
```

公式解释：

- `TRIM(text)`：去掉多余空格。
- `PROPER(...)`：把文本转成首字母大写的格式。

如果以后规则改成“全部大写”，只需要在名称管理器里把公式改成：

```excel
=LAMBDA(text, UPPER(TRIM(text)))
```

所有使用 `CLEAN_NAME` 的地方都会更新。

适用场景：客户名单、员工名单、CRM 导入数据、报名表清洗。

## 6. 示例三：封装多条件状态判断

场景：你需要根据订单逾期天数和订单金额判断发货状态。

规则：

- 如果逾期超过 3 天，并且订单金额超过 100 美元，状态为 `Priority`。
- 否则状态为 `Standard`。

创建 LAMBDA：

1. 打开 `Name Manager`。
2. 新建名称：

```text
CHECK_STATUS
```

3. 在 `Refers to` 中输入：

```excel
=LAMBDA(days, value, IF(AND(days > 3, value > 100), "Priority", "Standard"))
```

4. 在表格中使用：

```excel
=CHECK_STATUS([@[Days Late]], [@[Order Value]])
```

好处：

- 公式栏更干净。
- 状态判断规则集中在一个地方。
- 阈值变更时，只需要修改名称管理器里的公式。
- 每一行都使用同一套判断逻辑，减少不一致风险。

适用场景：订单优先级、客户分层、风险等级、审批状态、库存告警。

## 7. 什么时候不要强行用 LAMBDA

LAMBDA 很适合封装重复逻辑，但不是所有问题都应该用它。

以下情况可以继续使用辅助列或其他工具：

- 你需要对中间计算结果进行筛选。
- 你需要把中间分类字段用于数据透视表。
- 你需要用切片器按计算层级筛选报表。
- 数据清洗流程很复杂，更适合 Power Query。
- 数据处理已经超出 Excel 公式适合维护的范围，更适合 Python。

判断原则：

- **公式会重复出现，并且业务规则可能变化**：优先考虑 LAMBDA。
- **中间结果本身也有分析价值**：辅助列可能更合适。
- **数据清洗流程复杂、步骤多、来源多**：Power Query 或 Python 可能更合适。

## 8. 推荐命名习惯

为了让 LAMBDA 函数更容易维护，建议：

- 使用清楚的业务名称，而不是抽象缩写。
- 可以用全大写加下划线，例如：
  - `GET_LIST_PRICE`
  - `CLEAN_NAME`
  - `CHECK_STATUS`
  - `CALC_NET_PROFIT`
- 一个 LAMBDA 只做一类明确的事情。
- 如果逻辑复杂，在名称管理器的说明/注释里写清楚参数含义。

## 9. 实操练习

可以从一个最小练习开始：

1. 找一个你当前工作簿里被复制超过 3 次的公式。
2. 确认它的输入参数有哪些。
3. 把会变化的值抽出来，例如税率、费率、阈值。
4. 用 `LAMBDA` 写成函数。
5. 在 `Name Manager` 里命名。
6. 把原来的长公式替换成新函数调用。
7. 修改一次规则，检查所有结果是否自动更新。

练习模板：

```excel
=LAMBDA(input1, input2, calculation)
```

命名后调用：

```excel
=YOUR_FUNCTION_NAME(value1, value2)
```

## 10. 总结

LAMBDA 的价值不是让公式看起来更高级，而是让 Excel 工作簿更可维护。

它带来的变化是：

- 从“复制公式”变成“调用函数”。
- 从“多处修改”变成“一处修改”。
- 从“看不懂的长公式”变成“有业务含义的命名函数”。
- 从一次性表格，逐步变成可扩展、可维护的工作簿系统。

如果你经常维护业务报表、财务模型、运营表或数据清洗表，LAMBDA 值得优先掌握。