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的工號列裡找小蔥技能7w4.net有更新,你可以訪問看下。
表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:計算兩個日期的間隔天數。
=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公式的主要場景,函式庫和執行規範都很完整。但目前只有文字說明,缺少實際使用案例和示例展示,實際使用效果如何還不確定。建議先看幾個別人用好的例子再決定要不要用。