# Wps Formula

> 表格公式助手。描述你的计算需求，帮你写出对应的WPS表格公式， VLOOKUP、SUMIF、IF嵌套都支持，还说明WPS和Excel的兼容差异。 用于帮助用户生成WPS表格公式。当用户提到公式、函数、怎么算时触发。 WPS spreadsheet formula assistant.

- Skill: `bwkyd/wps-formula` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add bwkyd/wps-formula`
- Raw SKILL.md: https://api.skillmd.com/api/skills/bwkyd/wps-formula/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- License: MIT
- Author: bwkyd (https://skillmd.com/u/bwkyd)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/bwkyd/wps-formula

---


# WPS 公式专家

用中文描述你想算什么 → 自动生成 WPS 表格公式。

> **核心原则：生成的公式必须在 WPS 表格中可直接使用。注意 WPS 与 Excel 的函数差异。**

## When to Use

- 用户不知道该用什么函数
- 用户需要复杂的嵌套公式
- 用户遇到公式错误（#VALUE!, #REF!, #N/A等）
- 用户需要从自然语言描述转换为公式
- 用户问"怎么用公式实现XXX"

## When NOT to Use

- 用户需要编写WPS宏脚本 → 使用 `wps-jsa-macro`
- 用户需要数据清洗（去重/去空）→ 使用 `wps-data-clean`
- 用户需要创建数据透视表 → 使用 `wps-pivot`

## 工作流程

### Step 1: 理解需求

确认：
- **数据位置**：数据在哪些单元格/列？（如"A列是姓名，B列是销售额"）
- **计算目标**：想得到什么结果？
- **特殊条件**：是否有筛选条件、多条件、跨表引用？

### Step 2: 生成公式

**输出格式必须包含：**

```text
📌 公式：
=YOUR_FORMULA_HERE

📝 说明：
- 逐段解释公式的每个部分
- 指出关键函数的作用

📋 使用方法：
- 在哪个单元格输入
- 是否需要下拉填充
- 注意事项

⚠️ 注意：
- WPS兼容性提醒（如有）
- 常见陷阱
```

### Step 3: 公式调试（如遇到错误）

用户反馈错误时，按此流程排查：

```text
#VALUE!  → 数据类型不匹配（文本vs数字），检查是否有空格或隐藏字符
#REF!    → 引用的单元格被删除或超出范围
#N/A     → 查找函数未找到匹配值，检查查找值是否完全一致
#NAME?   → 函数名拼写错误或WPS不支持该函数
#DIV/0!  → 除数为零，用IFERROR包裹
#NUM!    → 数值参数无效
循环引用  → 公式直接或间接引用了自身所在单元格
```

## WPS 函数速查（按场景分类）

### 查找匹配（最高频！）

| 场景 | 推荐公式 | 示例 |
|------|---------|------|
| 精确查找 | `VLOOKUP` | `=VLOOKUP(A2,Sheet2!A:C,3,0)` |
| 左向查找 | `INDEX+MATCH` | `=INDEX(A:A,MATCH(D2,C:C,0))` |
| 多条件查找 | `INDEX+MATCH嵌套` | `=INDEX(D:D,MATCH(1,(A:A=F2)*(B:B=G2),0))` ⚠️需Ctrl+Shift+Enter |
| 模糊匹配 | `VLOOKUP通配符` | `=VLOOKUP("*"&A2&"*",B:C,2,0)` |
| 存在性检查 | `COUNTIF` | `=IF(COUNTIF(B:B,A2)>0,"有","无")` |

### 条件统计

| 场景 | 推荐公式 | 示例 |
|------|---------|------|
| 单条件求和 | `SUMIF` | `=SUMIF(A:A,"销售部",B:B)` |
| 多条件求和 | `SUMIFS` | `=SUMIFS(C:C,A:A,"销售部",B:B,">1000")` |
| 单条件计数 | `COUNTIF` | `=COUNTIF(A:A,"合格")` |
| 多条件计数 | `COUNTIFS` | `=COUNTIFS(A:A,"男",B:B,">=90")` |
| 条件平均 | `AVERAGEIF` | `=AVERAGEIF(A:A,"A班",B:B)` |
| 条件最大 | `MAXIFS` | `=MAXIFS(B:B,A:A,"销售部")` ⚠️WPS2019+ |

### 文本处理

| 场景 | 推荐公式 | 示例 |
|------|---------|------|
| 提取前N字符 | `LEFT` | `=LEFT(A2,3)` |
| 提取后N字符 | `RIGHT` | `=RIGHT(A2,4)` |
| 提取中间 | `MID` | `=MID(A2,4,8)` 从第4位取8个字符 |
| 查找位置 | `FIND/SEARCH` | `=FIND("@",A2)` FIND区分大小写 |
| 替换 | `SUBSTITUTE` | `=SUBSTITUTE(A2," ","")` 去空格 |
| 合并文本 | `CONCATENATE/&` | `=A2&"-"&B2` |
| 文本转数字 | `VALUE` | `=VALUE(A2)` |
| 数字转文本 | `TEXT` | `=TEXT(A2,"0.00")` |
| 去首尾空格 | `TRIM` | `=TRIM(A2)` |
| 提取中文 | 正则不支持 | 用VBA/JSA替代 |

### 日期时间

| 场景 | 推荐公式 | 示例 |
|------|---------|------|
| 今天日期 | `TODAY` | `=TODAY()` |
| 两日期间隔 | 直接相减 | `=B2-A2` 结果为天数 |
| 计算年龄 | `DATEDIF` | `=DATEDIF(A2,TODAY(),"Y")` |
| 提取年/月/日 | `YEAR/MONTH/DAY` | `=YEAR(A2)` |
| 工作日计算 | `NETWORKDAYS` | `=NETWORKDAYS(A2,B2)` |
| 月末日期 | `EOMONTH` | `=EOMONTH(A2,0)` 当月末 |
| 日期格式化 | `TEXT` | `=TEXT(A2,"YYYY年M月D日")` |

### 逻辑判断

| 场景 | 推荐公式 | 示例 |
|------|---------|------|
| 单条件判断 | `IF` | `=IF(A2>=60,"及格","不及格")` |
| 多层判断 | `IFS`或嵌套IF | `=IFS(A2>=90,"优",A2>=60,"及格",TRUE,"不及格")` |
| 错误处理 | `IFERROR` | `=IFERROR(VLOOKUP(...),"未找到")` |
| 多条件与 | `AND` | `=IF(AND(A2>0,B2>0),"有效","无效")` |
| 多条件或 | `OR` | `=IF(OR(A2="经理",A2="总监"),"管理层","普通")` |

### 数组公式（Ctrl+Shift+Enter）

```text
⚠️ WPS中数组公式需要按 Ctrl+Shift+Enter 确认，公式两端会显示{}

常用数组公式：
- 多条件查找：=INDEX(D:D,MATCH(1,(A:A=F2)*(B:B=G2),0))
- 条件去重计数：=SUMPRODUCT(1/COUNTIF(A2:A100,A2:A100))
- 多列求和：=SUMPRODUCT((A2:A100="条件")*B2:B100*C2:C100)
```

## WPS 与 Excel 函数差异

| 函数 | Excel | WPS | 说明 |
|------|-------|-----|------|
| `XLOOKUP` | Excel 365+ | WPS 2021+ | 旧版WPS不支持，用INDEX+MATCH替代 |
| `MAXIFS/MINIFS` | Excel 2019+ | WPS 2019+ | 旧版用MAX(IF())数组公式替代 |
| `IFS` | Excel 2019+ | WPS 2019+ | 旧版用嵌套IF替代 |
| `CONCAT` | Excel 2019+ | WPS 2019+ | 旧版用CONCATENATE |
| `TEXTJOIN` | Excel 2019+ | WPS 2019+ | 旧版无直接替代 |
| `UNIQUE` | Excel 365 | 部分WPS支持 | 建议用高级筛选或JSA宏替代 |
| `FILTER` | Excel 365 | 部分WPS支持 | 建议用高级筛选替代 |
| `SORT` | Excel 365 | 部分WPS支持 | 建议用排序功能替代 |
| `LET` | Excel 365 | 不支持 | 无法使用 |
| `LAMBDA` | Excel 365 | 不支持 | 无法使用 |

> **安全策略：** 默认使用兼容性最好的函数（VLOOKUP而非XLOOKUP），除非用户明确使用新版WPS。

## 金额大小写转换公式

这是中国财务场景的超高频需求：

```text
=IF(A1<0,"负","")&IF(INT(A1)=0,"零",
TEXT(INT(ABS(A1)),"[DBNum2]")&"元")&
IF(INT(ABS(A1)*10)-INT(ABS(A1))*10=0,
IF(INT(ABS(A1)*100)-INT(ABS(A1)*10)*10=0,"整","零"),
MID("壹贰叁肆伍陆柒捌玖",INT(ABS(A1)*10)-INT(ABS(A1))*10,1)&"角")&
IF(INT(ABS(A1)*100)-INT(ABS(A1)*10)*10=0,"",
MID("壹贰叁肆伍陆柒捌玖",INT(ABS(A1)*100)-INT(ABS(A1)*10)*10,1)&"分")
```

## 示例

```bash
# 自然语言→公式
/wps-formula 我想统计A列中"销售部"对应的B列金额总和

# 复杂需求
/wps-formula A列是姓名B列是部门C列是销售额，帮我找出每个部门销售额最高的人

# 错误修复
/wps-formula 我的VLOOKUP返回#N/A，查找值在A列，数据在Sheet2的A到D列
```

## 参考

函数详细分类见 [reference/formula-categories.md](reference/formula-categories.md)。
中文排版通用规范见 [../shared/chinese-typesetting.md](../shared/chinese-typesetting.md)。

