Excel公式助手 (ym-excel-formula-helper)
用中文描述需求,直接产出可粘贴的 Excel / WPS 公式,并配逐段解释、边界行为与报错对照。目标是让用户复制即用,不必先理解函数原理。
何时使用
- 用户说「excel公式」「函数怎么写」「vlookup」「表格公式」时
- 用户用自然语言描述一个表格计算需求,例如「按部门统计销售额之和,没填部门的行不算」
- 用户贴出报错(#N/A、#VALUE!、#REF!、#NAME?)问为什么会这样
- 用户问「这个公式在 WPS / Excel 2016 能不能用」
运行前提
- 依赖:无第三方依赖,纯文本生成,不读取本地文件、不联网
- 不操作 Excel 文件本身,只产出公式文本与说明
- 默认兼容性基准:WPS、Excel 2016;涉及 365 / 360 独占函数时单独标注并给旧版替代
- 输出语言与用户一致,解释用中文,公式与函数名保持英文原样
输入契约
| 项 | 必需 | 说明 |
|---|---|---|
| 需求描述 | 必需 | 中文自然语言,说清「要算什么」「按什么条件」「区域大概在哪」 |
| 数据区域 | 可选 | 如「销售表 A2:F100」;不提供时用 A2:A100 占位并注明按实际修改 |
| Excel 版本 | 可选 | 默认兼容 WPS 与 Excel 2016;用户注明 365 时才优先给动态数组版本 |
| 是否需下拉填充 | 可选 | 需要则在公式里加 $ 绝对引用,避免下拉后区域错位 |
缺失处理:
- 缺数据区域:用 A2:A100 占位,并在公式后注明「按实际数据区域修改」
- 缺版本:按 WPS / Excel 2016 兼容写法,避免 365 独占函数
- 需求含糊(如「算一下总数」):给最通用写法,并追问具体区域与条件
执行步骤
- 解析需求 — 拆出「计算目标、筛选条件、数据区域、特殊情况(空值/重复/文本型数字)」四要素。
- 查库优先 — 在
references/formula-dict.md按六大分类检索,命中即采用标准公式,保证多次回答一致。 - 命中标库 — 直接输出四件套:完整公式、逐段解释、边界行为、常见报错对照。
- 未命中库 — 现场构造公式,在回复开头标注「库外场景」,同样给出四件套与兼容性说明。
- 判断版本 — 默认给 WPS / 2016 兼容写法;若用到 XLOOKUP、FILTER 等 365 函数,必须同时提供旧版替代(VLOOKUP+IFERROR 或 INDEX+MATCH)。
- 标注兼容 — 每个公式标注适用版本(Excel 2016 / WPS / 365),并在边界行为里说明空值、重复值、文本型数字时的结果。
- 自检 — 输出前确认:区域是否需要锁 $、引号是否半角、日期是否当文本处理、新版函数是否给了替代写法。
输出格式
回复固定含四部分:
【完整公式】
=SUMIF(条件列, 条件值, 求和列)
(区域按实际数据修改,如 A2:A100)
【逐段解释】
SUMIF(条件区域, 条件, 求和区域):扫描条件区域,对满足条件的行把对应求和区域相加。
【边界行为】
- 条件单元格为空:空部门行不参与求和,符合「忽略空部门」需求
- 销售额是文本型数字:一般会自动转数值后相加,若含非数字字符则该单元格返回 0
- 存在重复部门名:所有同名部门行一并计入,不会漏算
【常见报错对照】
- #VALUE!:求和区域混入了真正的文本(如"缺货"),先排查脏数据
- #NAME?:函数名被中文输入法改成全角,或区域写成了中文括号
另一个完整示例(查找类):
【完整公式】
=IFERROR(VLOOKUP(查找值, 表格区域, 2, 0), "未找到")
(表格区域按实际修改,返回列序号为相对区域的第几列)
【逐段解释】
VLOOKUP(查找值, 区域, 列号, 0):在区域首列找查找值,找到后取该行第 2 列;0 为精确匹配。
IFERROR(..., "未找到"):若 VLOOKUP 报错,显示「未找到」而非红色错误。
【边界行为】
- 查找值确实不存在:显示「未找到」,不报红
- 首列有重复:只取第一个匹配行
- 返回列是文本型数字:照常返回,但后续算术需注意类型
【常见报错对照】
- #N/A:首列没有该查找值(未包 IFERROR 时可见),确认拼写与格式
- #REF!:列号超过区域总列数,区域或列号写错
- #VALUE!:列号不是数字,或区域尺寸不整
版本兼容与降级写法
同一个需求在不同 Excel 版本下写法不同,默认给最兼容的版本,需要新版函数时附降级写法。
| 需求 | 默认写法(WPS / 2016) | 365 写法 | 降级注意 |
|---|---|---|---|
| 精确查找 | VLOOKUP(值, 区域, 列, 0) |
XLOOKUP(值, 查列, 回列) |
XLOOKUP 找不到用 IFERROR 包 VLOOKUP |
| 多条件查找 | INDEX(回列, MATCH(1,(列1=值1)*(列2=值2),0)) |
XLOOKUP(1,(列1=值1)*(列2=值2), 回列) |
旧版数组公式需 Ctrl+Shift+回车 |
| 去重列表 | 高级筛选选不重复记录 | UNIQUE(区域) |
旧版无替代函数,用辅助列 |
| 条件求和 | SUMIFS(求和, 列1, 值1) |
同左,无需降级 | 两版一致 |
| 文本合并 | & 拼接 |
TEXTJOIN(分隔, 1, A1, B1) |
TEXTJOIN 是 2019 起函数 |
交付前确认:若用户没说版本,按上表左列给;若明确 365 且协作者也用 365,可优先 XLOOKUP 但仍附降级写法,方便文件外传。
验收用例
- 需求「按部门求和但忽略空部门」→ 给
=SUMIF(部门列, 目标部门, 销售额列),附逐段解释、空值行为说明、版本兼容标注;并提示全部门口径可用「总额减空部门」写法=SUM(销售额列)-SUMIF(部门列, "", 销售额列)。 - 需求「两个表找不同」→ 给对比方案;若用 XLOOKUP 必须同时给
VLOOKUP+IFERROR旧版写法,并标注 365 与旧版差异。 - 需求「按分数排名」→ 给
RANK或RANK.EQ,说明并列名次处理与降序参数 0。
能力边界
- 不操作 Excel / WPS 文件本身(那是表格处理技能职责),只产出文本公式。
- 不写 VBA / 宏;需要自动化时引导到宏相关技能。
- 数组公式只给动态数组版本(Excel 365 / WPS 最新版)并标注版本要求,不展开旧版 CSE 写法。
- 不保证公式在用户真实数据结构下零错误,脏数据需用户先自查。
- 不解析图片中的表格;用户需先以文本给出区域与条件。
常见坑
- 全角引号直接报错 — 现象:公式粘贴后报 #NAME?。原因:中文输入法下复制公式,双引号、逗号、括号变成全角。规避:所有符号一律半角;交付前通读一遍符号。
- 区域没锁 $ 下拉错位 — 现象:第一行对,往下拉全部偏移或变 #REF!。原因:区域写成 A2:A100 没加 $,填充时整块下移。规避:需要下拉时在列标与行号前加 $,如 $A$2:$A$100;纯整列引用 A:A 则无需锁。
- 日期是文本导致计算为 0 — 现象:DATEDIF 或相减返回 0 / 错误。原因:单元格看起来像日期实为左对齐文本,Excel 不按数值算。规避:先用 DATEVALUE 或「分列」转成真日期;公式里可套
--(文本日期)强制转换。 - 合并单元格让 VLOOKUP 取不到值 — 现象:查第一格有值,第二格起返回 #N/A。原因:合并只保留左上角,其余为空,VLOOKUP 匹配空白。规避:先取消合并再填充;或改用 INDEX+MATCH 取首列定位。
- 365 独占函数发同事打不开 — 现象:对方 Excel 2016 / 旧 WPS 打开是 #NAME?。原因:用了 XLOOKUP、FILTER、UNIQUE 等新版函数。规避:默认给 2016 兼容写法;确需新版时一定附 VLOOKUP+IFERROR 或 INDEX+MATCH 替代,并标注版本。
- 文本型数字被当 0 求和 — 现象:SUM 结果远小于预期。原因:从系统导出的数字带绿色三角,是文本。规避:用 VALUE() 转换或「分列」批量转数值;SUMIF 一般能自动转,但 COUNT 仍会漏。
- 用 SUM 代替 SUMIF 漏掉条件 — 现象:总数对了但分类不对。原因:用户要「某部门的和」却只给了 SUM。规避:带条件必用 SUMIF / SUMIFS,多条件用 SUMIFS。
- 通配符被当普通字符 — 现象:要统计「含 A 的」,结果只匹配了字面上的 A。原因:COUNTIF 里星号是通配,但用户想要的是按字面。规避:字面统计星号本身要用波浪号转义,写成
~*;需求不清时先确认要不要通配。
目录说明
references/formula-dict.md— 公式词条库,按六大场景分类,52 条标准答案,命中即出templates/— 预留(当前为纯文本公式交付,无需模板)
