Menu

Excel FIND 和 SEARCH 函数:查找文本在单元格中的位置

=SEARCH("apple",A2) 返回 apple 在 A2 中开始的位置,不区分大小写。FIND 的作用相同,但区分大小写。文本不存在时两者都返回 #VALUE!,用 ISNUMBER 就能把它变成“单元格是否包含”的判断。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=SEARCH("apple",A2) 返回 apple 在 A2 中开始的位置,从 1 开始计数,不区分大小写。=FIND("apple",A2) 的作用相同,但只匹配大小写完全一致的文本。找不到文本时,两者都返回 #VALUE!。

FIND 区分大小写,SEARCH 不区分
B2
ABC
1TextFIND("apple")SEARCH("apple")
2Apple pie#VALUE!1
3Green apple77
4Banana bread#VALUE!#VALUE!
#VALUE! 某个参数类型不对,比如该填数字的地方填了文本。

Apple pie 以大写字母 A 开头,所以 FIND 匹配不到,返回 #VALUE!,而 SEARCH 返回 1。在 Green apple 中两者都返回 7:空格也算一个字符。Banana bread 中根本没有 apple。

语法

=FIND(find_text, within_text, [start_num])
=SEARCH(find_text, within_text, [start_num])
  • find_text:要查找的内容,可以是一个字符或一个单词。
  • within_text:要在其中查找的单元格。
  • start_num:开始查找的位置,省略时为 1。返回的结果仍然从单元格的第一个字符开始计数。

判断单元格是否包含某段文本

你很少真正需要位置本身。通常要问的是“这个单元格里有没有这个词?”。位置是数字,找不到则是错误,所以用 ISNUMBER 就能把结果变成 TRUE 或 FALSE:

备注里提到延误了吗?
B2
ABC
1NoteContains "late"Status
2Arrived lateTRUECheck
3On timeFALSEOK
4LATE by 2 daysTRUECheck
5DeliveredFALSEOK
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

SEARCH 能匹配 A4 中的 LATE,因为它不区分大小写。注意,它也会匹配 latest 或 chocolate:SEARCH 查找的是字符,而不是完整的单词。查找前面带空格的 " late" 能稍微缩小范围。如果要统计有多少个单元格包含某个词,=COUNTIF(A2:A5,"*late*") 更短;见统计包含文本的单元格。

标记紧急工单
B2
AB
1SubjectUrgent?
2URGENT: server down
3Monthly report
4Refund request, urgent
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 B2 中,如果 A2 中的主题包含单词 urgent(大小写不限),返回 TRUE,否则返回 FALSE。公式会向下填充到 B4。

查找第二次出现的位置

start_num 让你可以从第一次匹配之后开始查找。把一个 FIND 放进另一个 FIND 里:里层的找到第一个短横线,外层的从它后面一个字符开始找。

第一个和第二个短横线的位置
C2
ABC
1CodeFirst dashSecond dash
2NYC-2041-B49
3BOSTON-15-AA710
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

有了这两个位置,MID 就能取出两个短横线之间的内容:=MID(A2,B2+1,C2-B2-1) 返回 2041。

@ 在哪里?
B2
AB
1EmailPosition
2ana@coddy.tech
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 B2 中返回电子邮件地址中 @ 的位置。

FIND 和 SEARCH 返回 #VALUE!

这里的 #VALUE! 只表示“没找到”。把它换成有用的值:

找不到时不显示错误
B2
AB
1EmailPosition of @
2ana@coddy.tech4
3not an email0
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

不要直接把结果和数字比较,比如 =FIND("@",A2)>0:找不到时结果是错误,比较会返回 #VALUE! 而不是 FALSE。应该像上一节那样用 ISNUMBER 来判断。

通配符:只有 SEARCH 支持

SEARCH 支持通配符 ?(任意一个字符)和 *(任意多个字符)。FIND 会把它们当作普通字符。在 Excel 中:

=SEARCH("b?d","a bad day")     returns 3
=SEARCH("2*B","NYC-2041-B")    returns 5
=SEARCH("~?","Why?")           returns 4, the tilde means a real question mark
=FIND("?","Why?")              returns 4, FIND has no wildcards

*、? 和 ~ 在各个 Excel 函数中的更多用法,见通配符一文。

FIND、SEARCH 与 Ctrl+F 对比

FINDSEARCHCtrl+F
大小写必须一致忽略忽略,除非勾选了“区分大小写”
通配符不支持?、*、~?、*、~
找不到时#VALUE!#VALUE!一条提示信息
结果一个位置,会重新计算一个位置,会重新计算选中该单元格

如果只是找一次某个值,用“开始 > 查找和选择 > 查找”(Ctrl+F,Mac 上为 Cmd+F)比写公式更快。如果要在每一行中标记或提取,并让结果随数据更新,就用 FIND 或 SEARCH。大小写有含义时(例如 ab 和 AB 这样的产品代码)用 FIND,处理人工输入的内容时一律用 SEARCH。

常见问题

Excel 中的 FIND 和 SEARCH 有什么区别?

FIND 区分大小写,不支持通配符。SEARCH 不区分大小写,支持 ? 和 *。=FIND("a","Apple") 返回 #VALUE!,而 =SEARCH("a","Apple") 返回 1。

怎样在 Excel 中提取两个短横线之间的文本?

找到两个短横线的位置,再用 MID 取出中间的部分:=MID(A2,FIND("-",A2)+1,FIND("-",A2,FIND("-",A2)+1)-FIND("-",A2)-1) 从 NYC-2041-B 中返回 2041。在 Microsoft 365 中,=TEXTBEFORE(TEXTAFTER(A2,"-"),"-") 更短。

FIND 为什么返回 #VALUE!?

单元格中没有这段文本,或者有但大小写不同(FIND 区分大小写)。在外面包一层让它返回别的值:=IFERROR(FIND("-",A2),0)。

怎样查找某个字符第二次出现的位置?

从第一次匹配之后的下一个字符开始查找:=FIND("-",A2,FIND("-",A2)+1)。第三个参数就是开始查找的位置。

Coddy 编程语言插图

和 Coddy 一起学编程

开始