Excel 通配符模糊匹配怎么做(VLOOKUP 模糊查找)
两张表想按「包含关键词」匹配,而不是完全相等——比如查找值是「上海分公司」,对方表里写的是「上海办事处」或「上海总部」。这时精确匹配失效,通配符是 Excel 里最常用的应对手段。本文讲清 * 和 ? 的用法、配合 VLOOKUP / COUNTIF 的写法,以及当数据太乱、通配符也搞不定时,怎么用超级表的 AI 清洗 + 关联列更稳妥地解决。
为什么会遇到模糊匹配的需求
现实数据里,同一个东西往往写法不统一。以公司名称为例:
- A 表写「上海鑫沃克斯信息科技有限公司」,B 表写「鑫沃克斯」——后缀丢了;
- A 表写「Apple Inc.」,B 表写「苹果公司」——中英文不同;
- 采购记录写「联想(北京)」,财务台账写「联想集团」。
这种情况下精确匹配全部返回 #N/A,于是很多人想到了通配符:先写一个「只要包含关键词就算匹配」的公式。通配符能解决一部分问题,但也有明显局限,下面一一说清。
Excel 通配符是什么
Excel 支持两个通配符,可用于 VLOOKUP、COUNTIF、MATCH、SEARCH 等函数的查找值参数:
*(星号):匹配任意数量的任意字符,包括零个字符。"上海*"能匹配「上海总部」「上海分公司」「上海」本身;"*科技*"能匹配任何包含「科技」的字符串。?(问号):匹配恰好一个任意字符。"张?"能匹配「张三」「张A」,但不能匹配「张三丰」(三个字)。常用于已知位数、但某几位不确定的场景。
如果数据里本身就有星号或问号字符,需要在前面加波浪号 ~ 转义:"~*" 才是在查找字面上的星号。
用通配符做模糊匹配
VLOOKUP 按「包含关键词」查找
最常用的写法是把通配符拼在查找值两侧,让 VLOOKUP 去表里找「包含 A2 的行」:
=VLOOKUP("*"&A2&"*", B表!A:C, 2, FALSE)
解析:"*"&A2&"*" 把 A2 的值夹在两个星号之间,组成一个「包含 A2」的模式串。B 表 A 列里只要有任何一行包含 A2 的字符串,就返回对应第 2 列的值。
实际例子:A2 = 联想,VLOOKUP 就会去 B 表里找第一个包含「联想」的单元格。如果 B 表里有「联想集团」,就能匹配上,返回对应的金额或分类。
只匹配开头:=VLOOKUP(A2&"*", B表!A:C, 2, FALSE)
只匹配结尾:=VLOOKUP("*"&A2, B表!A:C, 2, FALSE)
COUNTIF 统计包含关键词的行数
如果只是想知道某个关键词在表里出现了多少次:
=COUNTIF(A:A, "*"&C2&"*")
C2 是关键词,A 列是要统计的范围。每行只要包含 C2 就计一次。
通配符方案的坑
通配符能处理部分场景,但以下情况会踩坑:
- 只能套在查找值上,不能套在被查范围上。 VLOOKUP 的通配符是对第一参数(查找值)生效的,所以必须是「用短串去匹配长串」。如果 A2 是长名称、B 表里是简称,这个方向反过来了,通配符就失效了,VLOOKUP 会返回
#N/A。 - 歧义匹配:同一关键词命中多行。 VLOOKUP 只返回第一个匹配结果。如果 B 表里有「联想集团北京」和「联想集团上海」,搜「联想」只会拿到第一行,另一行被静默跳过,不会报错,也看不出来。
- 数据太乱时搞不定。 关键词本身写法不一(「联想」有时写「Lenovo」)、多余前缀后缀、全角半角混用,通配符无法跨语言或跨格式匹配,需要先把数据标准化成一致写法才行。
- VLOOKUP 性能问题未消失。 通配符匹配比精确匹配更慢,因为 Excel 要扫整列逐行比对模式,数据量大时更明显。
更稳:超级表先 AI 清洗标准化,再关联匹配
当数据不规整到通配符也难解决时,超级表(TableDI)提供了一条更可靠的路:先用 AI 清洗把两张表的关键列统一成一致写法,再用关联列做精确匹配。步骤如下:
- 导入两张表。把含有不规整名称的两张 Excel / CSV 表直接拖进超级表。
- AI 清洗标准化关键列。选中公司名称列,执行「AI 处理」,告诉它「提取公司简称,去掉括号、地区后缀、法律实体后缀,统一中文」。超级表会逐行处理,把「联想(北京)有限公司」「Lenovo Group」等各种写法统一成「联想」。两张表都处理一遍,写法就对齐了。具体用法见用 AI 一句话清洗表格数据。
- 新建关联列。在目标表上新建「关联 / 引用」列,选择「按标准化名称匹配另一张表」。此时两边写法一致,精确匹配完全命中,不需要通配符。
- 勾选要带过来的字段。金额、分类、联系人等可以一次全勾,不需要像 VLOOKUP 那样每列改一次列号。
- 完成。源表更新后关联列自动跟着变,无需重拖公式。
超级表是桌面端本地运行,数据不上云,两张表匹配的基础操作完全免费。
两种方案对比
| 对比项 | Excel 通配符 VLOOKUP | 超级表 AI 清洗 + 关联列 |
|---|---|---|
| 适用场景 | 短串包含长串、写法差异小 | 写法差异大、跨语言、多余前后缀 |
| 方向限制 | 只能「查找值」含通配符 | 双向,清洗后精确匹配 |
| 歧义处理 | 返回第一条,其余静默跳过 | 精确匹配,不存在歧义 |
| 数据乱时 | 搞不定,需手动预处理 | AI 清洗自动标准化 |
| 匹配多列 | 每列改列号写一遍 | 一次勾选 |
| 源表更新 | 不自动,要重拖 | 自动更新 |
常见问题
* 和 ? 有什么区别?
*(星号)匹配任意数量的任意字符,包括零个。"*联想*" 能匹配任何包含「联想」的字符串,不管联想前后有多少字。?(问号)只匹配恰好一个字符:"张?" 能匹配「张三」(两个字),但不能匹配「张三丰」(三个字)。日常模糊查找基本都用 *;? 用于「已知字数、某位不确定」的场景,例如产品编号 "A??-2024"。
Excel 怎么按「包含某词」匹配?
用 "*"&A2&"*" 把关键词夹在两个星号之间,作为 VLOOKUP 的第一参数:=VLOOKUP("*"&A2&"*", 查找区域, 列号, FALSE)。VLOOKUP 会在查找区域的第一列里找第一个包含 A2 值的单元格,返回对应列的内容。注意:只能查找区域里第一列的每行是否包含关键词,不能反过来用。
通配符匹配到多个怎么办?
VLOOKUP 只返回第一个匹配行,后面的被跳过且不报错。如果需要返回所有匹配结果,Excel 里可以用 FILTER 函数(Office 365 / WPS 新版支持)配合 ISNUMBER(SEARCH(...)) 筛出所有包含关键词的行。如果只是要统计有多少行匹配,用 COUNTIF 配合通配符即可:=COUNTIF(A:A, "*"&C2&"*")。