Excel 通配符使用指南:*、?、~ 和支持函数清单
讲清 Excel 中 *、?、~ 三种通配符的含义,整理 COUNTIF、SUMIFS、XLOOKUP、MATCH、SEARCH 等支持通配符的常用函数,并给出前缀、包含、结尾和转义案例。
在 Excel 里,通配符就是用一个符号代替不确定的文字。比如商品编码可能是 K161-BK、K161-WH、K161-蓝牙版,共同点都是以 K161 开头,就不必先用 LEFT 截取,直接写 "K161*" 即可。
先看一个完整案例。下面的公式会检查 SKU 列,找到所有以 K161 开头的记录,再把对应订单金额汇总起来。
K161*:匹配所有以 K161 开头的 SKU不用 LEFT 截取,直接用通配符完成匹配与汇总。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 7 | 订单号 | 平台 | SKU | 订单金额 | 客服响应分钟 |
| 8 | TM001 | 天猫 | K161-BK | 199.00 | 4 |
| 9 | PDD002 | 拼多多 | X51C-BK | 159.00 | 8 |
| 10 | JD003 | 京东 | M30-BK | 99.00 | 3 |
| 11 | TM004 | 天猫 | P12-BK | 149.00 | 5 |
| 12 | PDD005 | 拼多多 | K161-WH | 219.00 | 12 |
| 13 | JD006 | 京东 | X51C-BK | 169.00 | 6 |
| 14 | TM007 | 天猫 | M30-WH | 109.00 | 2 |
| 15 | PDD008 | 拼多多 | P12-BL | 139.00 | 10 |
| 16 | TM009 | 天猫 | K161-BK | 209.00 | 7 |
| 17 | PDD010 | 拼多多 | M30-BK | 89.00 | 9 |
这个案例里,C8:C17、"K161*"、D8:D17 分别回答三个问题:检查哪里、匹配什么、汇总哪里。理解这三个问题,比单独背公式参数更容易。
表格上方的 A~E 和左侧的 7~17 是 Excel 的列标与行号,不属于数据本身。字段标题放在第 7 行,公式从第 8 行开始计算,因此 SKU 对应 C8:C17,订单金额对应 D8:D17。
Excel 只有三种通配符
严格来说,真正负责模糊匹配的是 * 和 ?;~ 是转义符,用于告诉 Excel:后面的星号或问号是普通字符,不要把它当作通配符。
*K161✓ 匹配K161-BK✓ 匹配K161-黑色-套装✓ 匹配K161* 表示固定内容是 K161,后面允许出现任意数量字符。
?K161✓ 匹配KA61✓ 匹配K1261× 两个字符K?61 中间只有一个字符槽位,所以 K1261 不符合。
~*任意字符→~*真实星号赠品*✓ 包含星号赠品*请勿单拍✓ 包含星号赠品说明× 没有星号"*~**" 中,前后两个星号是通配符,中间的 ~* 才是真正的星号字符。
六种高频写法
通配符最常见的差别,不是函数,而是固定文字出现在什么位置。把字符串看成几段,就能快速判断星号应该放在哪里。
"K161*"型号固定,颜色、规格或备注在后面变化。
"*已退款"状态文字固定在单元格末尾。
"*蓝牙*"标题任意位置出现“蓝牙”。
"K?61"K 和 61 中间必须正好一个字符。
F2&"*"把单元格中的型号作为开头条件。
"*~**"查找文本中真正出现的星号。
下面这张表保留了更完整的边界,适合需要核对时快速查询。
| 写法 | 匹配规则 | 可以匹配 | 不会匹配 |
|---|---|---|---|
K161* | 以 K161 开头 | K161、K161-黑色 | 黑色-K161 |
*K161 | 以 K161 结尾 | 黑色-K161 | K161-黑色 |
*K161* | 任意位置包含 K161 | 黑色-K161-套装 | K162-黑色 |
K161? | K161 后正好一个字符 | K161A、K161黑 | K161、K161黑色 |
K?61 | K 和 61 中间正好一个字符 | K161、KA61 | K1261 |
~* | 查找真正的星号 | 赠品* 中的 * | 普通文字 |
哪些函数支持通配符
并不是所有函数都能直接识别通配符。即使支持,不同函数的开启方式也不一样:条件统计函数直接写,XLOOKUP 和 XMATCH 要把匹配模式设为 2,VLOOKUP、HLOOKUP 和 MATCH 则要使用精确匹配参数。
COUNTIF(S)SUMIF(S)AVERAGEIF(S)MAXIFSMINIFS"K161*"XLOOKUPVLOOKUPHLOOKUPmatch_mode=2;传统函数写 FALSEXMATCHMATCH2;MATCH 写 0SEARCHISNUMBERFILTER支持方式速查表
| 函数 | 通配符写在哪里 | 必须注意的参数 | 常见用途 |
|---|---|---|---|
COUNTIF、COUNTIFS | 条件参数 | 无 | 统计某类编码、标题或状态数量 |
SUMIF、SUMIFS | 条件参数 | 无 | 汇总某类商品的销量或金额 |
AVERAGEIF、AVERAGEIFS | 条件参数 | 无 | 计算某类商品的平均值 |
MAXIFS、MINIFS | 条件参数 | 无 | 找出某类数据的最大值或最小值 |
VLOOKUP、HLOOKUP | 查找值 | 最后一个参数写 FALSE | 返回第一条符合模糊条件的数据 |
MATCH | 查找值 | 第三个参数写 0 | 返回第一条匹配记录的位置 |
XLOOKUP | 查找值 | 第五个参数 match_mode 写 2 | 返回第一条符合通配符的数据 |
XMATCH | 查找值 | 第三个参数 match_mode 写 2 | 返回第一条符合通配符的位置 |
SEARCH | find_text 参数 | 无 | 在单元格文字内部查找模式 |
三类函数的写法不一样
1. 条件统计函数:直接写通配符
这类函数最简单,只需要把通配符写进条件中。
=COUNTIF(C8:C17,"K161*")命中 3 条=SUMIF(C8:C17,"K161*",D8:D17)结果 627=AVERAGEIF(C8:C17,"K161*",D8:D17)结果 209=AVERAGEIF(C8:C17,F2&"*",D8:D17)F2 填写 K161条件来自单元格时,不要把单元格引用放进引号:
=AVERAGEIF(C8:C17,F2&"*",D8:D17)
假设 F2 是 K161,F2&"*" 会拼成 K161*。这里的 F2 是额外的条件输入单元格,不属于上方 A:E 数据区域。
2. 查找函数:先开启正确的匹配模式
XLOOKUP 默认是精确匹配,但默认不会把 * 和 ? 当成通配符。要使用通配符,必须把第五个参数设为 2:
=XLOOKUP("K161*",C8:C17,D8:D17)结果:未找到默认把星号当成公式中的普通匹配内容,不会进入通配符模式。
=XLOOKUP("K161*",C8:C17,D8:D17,"未找到",2)结果:199第五个参数写 2 后,返回第一条以 K161 开头的记录。
XMATCH 同样需要把第三个参数设为 2:
=XMATCH("K161*",C8:C17,2)
传统查找函数使用精确匹配参数时,也能识别通配符:
=VLOOKUP("K161*",C8:D17,2,FALSE)
=MATCH("K161*",C8:C17,0)
3. SEARCH:在文本内部查找模式
SEARCH 返回的是匹配内容在文本中的起始位置。比如编码中间有一个字符不确定:
=SEARCH("K?61",C8)
上方案例中的 C8 是 K161-BK,结果为 1。如果找不到,会返回 #VALUE!。
实际判断时,通常会和 ISNUMBER 组合:
=ISNUMBER(SEARCH("K?61",C8))
找到时返回 TRUE,找不到时返回 FALSE。
回到最开始的 AVERAGEIF 公式
原来的公式是:
=AVERAGEIF(MAP(LEFT(C8:C17,4),LAMBDA(r,LEFT(r,4))),"K161",D8:D17)
它的真实目标只是:找出 C 列中所有以 K161 开头的记录,再计算 D 列平均值。
因此可以直接改成:
=AVERAGEIF(C8:C17,"K161*",D8:D17)
=AVERAGEIF(MAP(LEFT(...)),"K161",D8:D17)需要先生成中间数组,公式长,读者还要反推每一步在做什么。
=AVERAGEIF(C8:C17,"K161*",D8:D17)不需要 LEFT、MAP 和 LAMBDA,条件本身就与实际需求完全一致。
容易踩的五个坑
XLOOKUP 忘了写匹配模式 2
=XLOOKUP("K161*",C8:C17,D8:D17) 不会启用通配符。应改为 =XLOOKUP("K161*",C8:C17,D8:D17,"未找到",2)。
* 不等于“所有非空单元格”
=COUNTIF(A2:A100,"*") 主要统计文本。要统计数字、文字和日期等全部非空内容,优先使用 COUNTA(A2:A100)。
通配符通常不区分英文大小写
K161* 和 k161* 通常会匹配相同内容。需要严格区分大小写时,不能只依赖通配符条件。
FIND 和 FILTER 不会直接解释通配符
FILTER 需要一组 TRUE/FALSE。按包含关系筛选时,可以组合:=FILTER(D8:D17,ISNUMBER(SEARCH("K161",C8:C17)))。
前后空格会改变“开头”和“结尾”
如果单元格实际是 K161-BK,前面多了空格,就不满足“以 K161 开头”。数据来源不干净时,先用 TRIM 或清洗源数据。
应该选哪个函数
通配符函数选择顺序
计数用 COUNTIF(S),求和用 SUMIF(S),平均值用 AVERAGEIF(S),极值用 MAXIFS 或 MINIFS。
把 match_mode 设为 2;旧表格可以使用 VLOOKUP,并把最后一个参数设为 FALSE。
XMATCH 的 match_mode 写 2;MATCH 的 match_type 写 0。
需要 TRUE/FALSE 时,再组合 ISNUMBER;需要筛选多行时,可继续组合 FILTER。