关于本文
本文是通过利用生成式 AI 的自动化生成流程创建的。基于微软关于 COUNTIF 函数的官方说明,整理了通配符和转义机制,以便能够在虚拟表格中安全地进行测试。验证状态:参考官方规范构建。未在 Excel 实机上确认运行情况和屏幕显示。根据版本、区域设置和输入格式的不同,显示和操作可能会有所差异。
只想统计“带有星号的商品”,却统计了所有商品
假设在商品管理表中,只有特殊的商品名称带有星号。例如“普通商品”、“特价*”、“试作品?”这样的名称。当尝试使用 COUNTIF 统计“包含星号的行”时,有时会得出比预期更大的数量。原因在于,在 Excel 的搜索条件中,星号不被视为普通字符,而是被解释为表示“任意字符串”的符号。
例如,如果在条件中只指定一个星号,不仅会匹配写有星号的单元格,还会匹配各种字符串。肉眼看可能只是微小的差异,但汇总结果却会有很大不同。要理解这一点,必须区分作为字符的星号和作为搜索符号的星号。创建一个不改变数值的练习表,首先故意进行广泛匹配,然后加上“~”并观察意义发生变化的地方。无需直接编辑实际数据。此外,这里处理的是 COUNTIF 的条件表达式,其规则与 Excel 全局的正则表达式或文件名搜索并不相同。
创建练习数据
在空白工作表的 A1 中输入“商品名”,从 A2 到 A7 依次输入“普通商品”、“特价”、“试作品?”、“库存~”、“”、“无空白”。星号、问号和波浪号请使用半角字符。全角字符“*”、“?”会被当作不同的字符处理。
将条件表达式放在另一列,例如 C列。首先以 A2:A7 这 6 行作为目标,如果添加了行,也请更新范围。在混合了空白单元格或数字的业务表中,结果的解释可能会发生变化,因此最初请仅使用上述字符串进行测试。
| 输入到 C 列的公式 | 要检查的内容 | 此练习表中的预期 |
|---|---|---|
=COUNTIF(A2:A7,"*") | 广泛匹配字符串 | 6 |
=COUNTIF(A2:A7,"~*") | 星号本身 1 个字符 | 1 |
=COUNTIF(A2:A7,"*~*") | 以星号结尾的字符串 | 2 |
=COUNTIF(A2:A7,"*~**") | 包含星号的字符串 | 2 |
=COUNTIF(A2:A7,"*~?*") | 包含问号的字符串 | 1 |
=COUNTIF(A2:A7,"*~~*") | 包含波浪号的字符串 | 1 |
表中的数字仅为说明用的预测结果,并非在制作本文时启动 Excel 确认所得的值。仅包含“”的条件是表示整个字符串的通配符。另一方面,“~”则匹配作为普通字符的一个星号。这是我们的第一个发现。
首先尝试的三个公式
首先,在 C2 单元格中输入以下公式。
=COUNTIF(A2:A7,"*")
请观察“本想寻找带有星号的商品,却连普通商品也被统计进去了”这一现象。此条件中的星号不是检查字符有无的标记,而是匹配任意字符串的通配符。由于练习表全部是字符串,因此预计结果为 6 条。不过,如果通用表格中包含空格、数字或公式,则不一定简单地等于总行数。
接下来,在 C3 中输入以下公式。
=COUNTIF(A2:A7,"~*")
此公式用于查找整个单元格恰好为一个星号的情况。在本次数据中,只有 A6 这一行。这是因为在前面加上波浪号后,紧随其后的星号就被当作普通字符而不是通配符处理了。“特価*”并不是整个字符串只有一个星号,所以在此不匹配。
接着,在 C4 中输入以下公式。
=COUNTIF(A2:A7,"*~*")
左侧的星号是任意前置字符串,右侧的“~”则是作为文字的星号。因此,“特价”和“*”便成为了候选。与之前的公式相比较,我们就能看出“完全一致”与“末尾一致”的区别。当您想要增加搜索对象时,通配符放置的位置非常重要。
用图表区分“包含”、“末尾”与“完全一致”
即使是相同的星号,它在条件字符串中的作用也各不相同。以下图表并非对Excel内部实现的还原,而是一张用于理解搜索条件的示意图。
flowchart TD
A["COUNTIFの条件を読む"] --> B{"星印の前にチルダがある?"}
B -->|はい| C["文字としての星印を照合"]
B -->|いいえ| D["任意の文字列として照合"]
C --> E["前後のワイルドカードで位置を指定"]
D --> E
E --> F["セルごとの一致数を合計"]
图表左侧需要注意的是,波浪号改变了星号的含义。后半部分的“前后通配符”用于确定想要匹配的位置。由于实际操作中会解释整个条件字符串,因此请勿将此图作为“Excel必定按此顺序处理”的性能说明来使用。
如果要统计作为文字的星号“在某个位置”的单元格,则允许星号前后存在任意字符串。具体来说就是“~”。左端和右端的星号是通配符,只有中间的“~”是作为文字的星号。即使看起来是连续的符号,它们的角色也各不相同。阅读时将其拆解为“任意的前半部分”、“真正的星号”和“任意的后半部分”这三个部分,就不会迷失了。
以相同的思路研究问号和波浪号
在COUNTIF的条件中,问号通常是匹配任意单个字符的通配符。如果仅将“?”作为条件,寻找的并不是作为一个文字的问号。若想寻找问号本身,请使用“~?”。例如“~?”,它就会成为寻找包含问号的字符串的条件。在练习表中,“试作品?”就是候选之一。
更加容易混淆的是波浪号本身。若想原封不动地寻找具有转义通配符作用的这个字符,则需要将其重叠写为“~~”。“~~”这种形式允许前后存在任意字符串,同时寻找中间作为文字的波浪号。在练习表中,预期的对应项是“库存~”。
这里最重要的是不要将这三个符号视为相同的东西。星号代表任意长度,问号代表一个字符,而波浪号则用于将紧随其后的特殊符号作为文字进行转义。向他人解释搜索条件时,如果能区分“哪个符号用于搜索,哪个符号是实际商品名称的一部分”,就能准确传达给审核人员。
仅修改一个条件进行比较
从最初的“~”开始,在末尾再追加一个星号,将其变更为“~”。由于在练习表中两者的预测结果都是2件,因此看不出区别。为此,我们在A8单元格中添加了一行名为“仅限开头”的虚拟商品名,并将汇总范围变更为A2:A8。这样一来,以星号结尾的条件“~”则不会匹配新增的行,而包含星号的条件“*~”则会匹配。
这项对比是一个实验,旨在让你理解增加条件会带来什么变化。与其单纯死记硬背两个公式,不如只修改一个数据,这样“末尾匹配”和“包含匹配”的区别就会更加明显。在工作中制作搜索条件时,除了预期的匹配示例之外,再添加一个不希望匹配的示例,将更容易发现统计错误。
此外,如果在添加 A8 后忘记更新数据范围,两个公式都不会检查新增的行。这并非搜索条件错误,而是统计范围指定遗漏。养成将条件表达式与数据范围分开检查的习惯非常重要。
无法正确计数时的排查方法
首先,请确认全角和半角字符。全角的星号与半角的通配符不同。如果复制的字符只是看起来相似,即使公式编写正确也不会匹配。请直接比较输入栏中的字符,必要时在新练习表中重新输入半角字符。
其次,确认条件是针对整个单元格的完全匹配,还是部分匹配。“~”假定为单个星号的完全匹配,而“~*”则是包含星号的字符串。如果你想统计“特价”却使用了“~*”,原因往往不是转义用错了,而是前后缺少了通配符。
第三点是数据范围和单元格类型。COUNTIF 在混合了数字、空白、公式结果和字符串时,可能会产生与预期不同的结果。例如,有些单元格看起来是空白的,但实际上包含空格。请排查字符串开头或结尾是否混入了空格,或者该值是否由公式返回。当数量不符时,用筛选器筛选目标列并逐一检查候选单元格,将更容易追溯原因。
第四点是 Excel 的参数分隔符。根据区域设置的不同,某些环境可能使用分号而不是公式中的逗号。如果在粘贴公式时直接出现语法错误,请在怀疑条件含义之前,先检查 Excel 的区域设置和函数输入辅助功能。由于函数名称的本地化也存在环境差异,因此无法断言本文中的公式在所有环境中都能直接运行。
在实际业务中,应在多大程度上依赖 COUNTIF?
如果商品名称或申请编号中仅包含符号,COUNTIF 的通配符和波浪号有时就足够了。如果能够在另一列中设置分类代码,那么以分类代码作为条件,会比仅凭显示名称中包含的星号来判断业务上的“特价”含义更加明确。如果星号只是单纯的装饰,或者录入人员经常漏输,那么即使绞尽脑汁优化搜索公式,也无法解决数据质量本身的问题。
此外,COUNTIF 的通配符并非通用的正则表达式。如果勉强用一个条件表达式去表达“任意 3 位数字”“仅在特定符号紧后匹配”等复杂规则,会增加维护难度。如有必要,可以考虑创建辅助列,将字符串的检查结果用 TRUE/FALSE 等形式可视化,然后再基于该结果进行统计。
在将统计结果反映到正式管理表之前,请先在复制的表中准备好“匹配示例”“不匹配示例”和“边界示例”。切勿直接覆盖原始数据,务必以能够核对公式结果的形式保留下来。特别是在销售额或库存统计中,条件表达式不报错却返回错误的数量,这种情况往往最难被发现。
总结
在搜索条件中,COUNTIF 的星号原则上表示任意字符串。如果要查找作为字符本身的星号,请使用“~*”;查找问号用“~?”;查找波浪号用“~~”。此外,通过决定是否在前后放置通配符,可以区分完全匹配、末尾匹配和部分匹配。
在这个小型练习表中,核心要点是:“明明是相同的星号,仅凭一个波浪号就能改变统计的含义。”如果预计数量不符,请按顺序检查符号是半角还是全角、条件的前后位置、统计范围以及数据类型。不仅要记住正确的公式,还要确认不该匹配的行确实没有被匹配,这样才能在日常统计中放心地使用。
官方文档
- Microsoft 支持:COUNTIF 函数——用于确认通配符和波浪号处理方式的原始资料。

