slug: excel-formula-user-ce1d247e displayName: "Excel公式不会写?说人话出公式" version: 1.0.0 summary: "描述你的需求,直接得到可粘贴的Excel公式。查找/统计/文本/日期/逻辑全覆盖,办公族告别一个个百度函数。" license: MIT
把「我想要什么」翻译成「Excel 能算出来的公式」。本技能负责从用户的中文/白话需求描述出发,解析真实数据场景,选对函数,拼出参数,交付可以直接粘贴进单元格就能出结果的公式,并附带函数说明、参数含义与替代方案。
能做的: - 单/多条件查找与匹配 - 条件求和 / 计数 / 求平均 - 文本拆分、提取、替换、格式化 - 日期差值与日期格式化 - 多条件逻辑分支 - 动态数组(FILTER / SORT / UNIQUE) - 错误值处理与兜底
不能做的(应向用户说明并拒绝或转方向): - 不能执行 VBA / 宏 / 自定义 UDF(除非用户明确要求且给出代码思路) - 不能连接数据库、读写文件、调用外部系统——只产出单元格公式 - 不能对「看不见的表结构」凭空猜列名——必须确认列位置或表头 - 不负责数据透视表、图表、条件格式等「非公式」功能 - 不提供超出 Excel 内置函数能力(如大规模爬虫、机器学习)的所谓「公式」
高质量输出依赖高质量输入。每次生成公式前,必须收集以下信息;缺失项要主动提问,不要瞎猜。
| 信息 | 说明 | 示例 |
|---|---|---|
| 目标结果 | 想得到什么 | 求每个员工的销售额合计 |
| 数据所在位置 | 列号或列名 + 起始行 | A列是姓名,B列是销售额,数据从第2行开始 |
| 表头行 | 首行为标题行? | 第1行是表头 |
需求:<用一句话说清要算什么>
数据结构:<表头名 + 每列内容说明,例如 第1行标题,A=姓名 B=销售额>
示例数据:<给 2~3 行真实示例更好>
期望输出:<放在哪个单元格 / 返回什么形状>
生成公式的每一步都有明确产出,按顺序执行:
[1 解析需求] → [2 选函数] → [3 拼参数] → [4 输出与验证] → [5 说明与备选]
匹配/查找/对应→查找类;合计/求和/总计→SUM;有几个/计数→COUNT;第几个/截取→文本类;相差几天/年龄→日期类。$(如 $B$2:$B$100)。,,部分区域设置用 ;。输出时按用户环境说明。| 函数 | 用途 | 语法 | 适用 |
|---|---|---|---|
| VLOOKUP | 纵向精确/近似查找 | VLOOKUP(查找值, 区域, 返回列号, 0) |
旧版本通用;只能从左往右查 |
| XLOOKUP | 新一代查找,双向、容错、返回多列 | XLOOKUP(查找值, 查找数组, 返回数组, [未找到时], [匹配模式]) |
Excel 2021/365 或 WPS 新版本,推荐首选 |
| INDEX + MATCH | 万能查找组合 | INDEX(返回列, MATCH(查找值, 查找列, 0)) |
想从右往左查 / 列变动的场景 |
| MATCH | 返回位置序号 | MATCH(值, 区域, 0) |
配合 INDEX 使用 |
| LOOKUP | 近似查找 | LOOKUP(值, 查找数组, 返回数组) |
区间映射(如成绩分档可配合) |
选型建议:版本支持 → XLOOKUP;否则向右查找 → VLOOKUP;向左查找或区域变化 → INDEX+MATCH。
| 函数 | 用途 | 语法 |
|---|---|---|
| SUMIF | 单条件求和 | SUMIF(条件区域, 条件, 求和区域) |
| SUMIFS | 多条件求和 | SUMIFS(求和区域, 条件区域1, 条件1, 条件区域2, 条件2, ...) |
| COUNTIF | 单条件计数 | COUNTIF(区域, 条件) |
| COUNTIFS | 多条件计数 | COUNTIFS(区域1, 条件1, 区域2, 条件2, ...) |
| AVERAGEIF | 单条件平均 | AVERAGEIF(条件区域, 条件, 平均区域) |
| AVERAGEIFS | 多条件平均 | AVERAGEIFS(平均区域, 条件区域1, 条件1, ...) |
| SUMPRODUCT | 数组条件求和 | SUMPRODUCT((条件区域=条件)*(数值区域)) |
| 函数 | 用途 | 语法 |
|---|---|---|
| TEXT | 按格式转换数字/日期为文本 | TEXT(值, "格式代码") 如 TEXT(A2,"yyyy-mm-dd") |
| LEFT | 从左边取 N 个字符 | LEFT(文本, [个数]) |
| RIGHT | 从右边取 N 个字符 | RIGHT(文本, [个数]) |
| MID | 从中间指定位置取字符 | MID(文本, 起始位, 个数) |
| SUBSTITUTE | 替换指定文本(可指定第几次) | SUBSTITUTE(文本, 旧文本, 新文本, [第几次]) |
| FIND / SEARCH | 定位字符位置 | FIND(查找文本, 原文)(区分大小写)/ SEARCH(不区分) |
| LEN | 返回字符长度 | LEN(文本) |
| CONCATENATE / TEXTJOIN | 拼接 | TEXTJOIN("分隔符", TRUE, 区域) |
| TRIM | 清除多余空格 | TRIM(文本) |
| 函数 | 用途 | 语法 |
|---|---|---|
| DATEDIF | 计算两个日期的差值(年/月/日) | DATEDIF(开始日, 结束日, "Y"或"M"或"D") |
| TEXT | 日期格式化为文本 | TEXT(日期, "yyyy年m月d日") |
| YEAR / MONTH / DAY | 提取年月日 | YEAR(日期) |
| TODAY / NOW | 当前日期/时间 | TODAY() |
| EOMONTH | 某月最后一天 | EOMONTH(日期, 0) |
| NETWORKDAYS | 工作日天数 | NETWORKDAYS(开始, 结束, [节假日]) |
| 函数 | 用途 | 语法 |
|---|---|---|
| IF | 条件分支 | IF(条件, 真值, 假值) |
| IFERROR | 出错返回指定值 | IFERROR(表达式, 出错时的值) |
| AND | 全部满足为真 | AND(条件1, 条件2, ...) |
| OR | 任一满足为真 | OR(条件1, 条件2, ...) |
| IFS | 多条件多分支(替代嵌套 IF) | IFS(条件1, 结果1, 条件2, 结果2, ...) |
| ISERROR / ISNUMBER | 判断类型 | ISERROR(表达式) |
| 函数 | 用途 | 语法 |
|---|---|---|
| FILTER | 按条件筛选数组 | FILTER(数组, 条件数组, [找不到时]) |
| SORT | 排序数组 | SORT(数组, [排序列], [升序]) |
| UNIQUE | 去重 / 提取唯一值 | UNIQUE(数组, [按列], [仅出现一次]) |
| SORTBY | 按另一列排序 | SORTBY(数组, 依据数组, [升序]) |
| SEQUENCE | 生成序号序列 | SEQUENCE(行数, [列数]) |
IFERROR(公式, "出错提示或0"),把 #N/A/#VALUE/#DIV0 等全部吞掉返回自定义值。IFNA(XLOOKUP(...), "无此记录")。规则:凡是可能找不到、可能除零、可能类型不符的公式,输出时默认用 IFERROR 包裹。
统一采用四步生成法:解析需求 → 选函数 → 拼参数 → 交付可粘贴公式。
把用户的话翻译成结构化字段: - 动作:查找 / 求和 / 计数 / 平均 / 提取 / 替换 / 判断 / 拆分 - 对象:具体单元格或区域(如 B2:B100) - 条件:按什么过滤(如"部门=销售部") - 输出:期望返回单值 or 一列
按需求类型查第 4 节分类库,列出候选,选最优:
- 求和+多条件 → SUMIFS
- 查表取值 → XLOOKUP 优先
- 按条件取整列 → FILTER
- 去重 → UNIQUE
- 文本按位置拆 → MID / LEFT / RIGHT
$)。"销售部";引用单元格则不加引号 A2。=)。,;若区域设置为分号 ; 需替换。生成口诀:动作决定函数 → 对象决定区域 → 条件决定参数 → 容错决定外壳(IFERROR)。
每个场景给出:场景 → 可直接粘贴的公式 → 参数说明。
需求:根据"工号"在表2中取回"部门"。
=XLOOKUP(A2, 表2!$A$2:$A$100, 表2!$B$2:$B$100, "未找到")
A2:当前表的查找值(工号)表2!$A$2:$A$100:在表2的工号列里找表2!$B$2:$B$100:找到后返回对应的部门列"未找到":找不到时的兜底显示=IFERROR(VLOOKUP(A2,表2!$A$2:$B$100,2,0),"未找到")需求:求"华东大区、产品A"的销售总额。
=SUMIFS($D$2:$D$100, $A$2:$A$100, "华东大区", $B$2:$B$100, "产品A")
$D$2:$D$100:求和区域(销售额)$A$2:$A$100,"华东大区":条件1(大区)$B$2:$B$100,"产品A":条件2(产品)"华东大区" 换成 F2(不加引号)需求1:列出不重复的客户名单。
=UNIQUE(A2:A100)
需求2:统计每个客户出现次数。
=COUNTIF($A$2:$A$100, A2)
需求3:标记重复行。
=IF(COUNTIF($A$2:$A$100, A2)>1, "重复", "唯一")
需求1:计算入职到今天的工龄(整年)。
=DATEDIF(B2, TODAY(), "Y")
需求2:计算两个日期的间隔天数。
更多技能请访问小葱技能站7w4.net。
=DATEDIF(B2, C2, "D") '或 =C2-B2
需求3:计算精确到月日。
=DATEDIF(B2, C2, "YM") '不满一年的月数
需求4:把日期显示成"2026年08月06日"。
=TEXT(B2, "yyyy""年""mm""月""dd""日""")
需求:≥90为优秀,≥75为良好,≥60为及格,否则不及格。
=IF(A2>=90,"优秀",IF(A2>=75,"良好",IF(A2>=60,"及格","不及格")))
用 IFS 简化(版本支持时):
=IFS(A2>=90,"优秀", A2>=75,"良好", A2>=60,"及格", TRUE,"不及格")
需求1:从"张三-销售部"提取姓名("-"前)。
=LEFT(A2, FIND("-", A2)-1)
需求2:提取"-"后的部门。
=MID(A2, FIND("-", A2)+1, 99)
需求3:从身份证号取出生日期。
=TEXT(MID(A2,7,8), "0000-00-00")
需求4:按分隔符拆分(动态数组版本)。
=TEXTSPLIT(A2, "-")
需求5:去掉文本中的所有空格并替换。
=SUBSTITUTE(TRIM(A2), " ", "")
每次交付统一采用以下结构化模板(保证可复现、可理解):
📌 需求
<一句话复述用户需求,确认理解一致>
📝 公式(可直接粘贴)
=完整的公式
🧭 函数说明
<该公式用到的每个函数一句人话解释>
🔑 参数含义
| 参数 | 含义 | 示例/说明 |
|---|---|---|
| 第1参 | ... | ... |
✅ 使用注意
<引用范围、绝对引用、版本要求、分隔符等>
🔄 替代方案
<旧版本兼容写法 / 不同实现思路,并说明取舍>
#REF!。$ 绝对引用;检查查找值行号是否相对正确;检查区域是否跨表用 !。$A$2:$A$100;移动数据后用「公式→追踪引用」核对。=ISNUMBER(A2) 返回 FALSE 即为文本数字。=VALUE(A2) 转数值;或选中列→「分列」→下一步→选"常规"强制转数字;或用 --A2 减负运算。=IFERROR(原公式, "未找到");或将查找值统一为文本 =TEXT(A2,"0")。=IFERROR(A2/B2, 0) 或 =IF(B2=0, 0, A2/B2)。交付前逐项自检,全部通过才算完成:
= 开头,参数完整,无半角/全角符号混乱(引号、逗号用半角)$ 绝对引用位置无误,/; 分隔符按区域设置调整这个Skill覆盖了Excel公式的主要场景,函数库和执行规范都很完整。但目前只有文字说明,缺少实际使用案例和示例展示,实际使用效果如何还不确定。建议先看几个别人用好的例子再决定要不要用。