Excel FIND函数查找第二个相同字符位置
讲清怎样用FIND函数的起始位置参数(start_num)找到第二个、第三个相同字符的位置,并给出提取中间内容、核对结果的做法,适合处理编号、日期和路径类数据。
在 Excel 里处理编号、日期、路径这类数据时,经常需要知道某个符号在第几位,比如 2024-03-15 里的第二个短横线在第几个字符。很多人用 FIND 函数只能找到第一个,于是不知道怎么继续往后找。这篇文章专门讲 excel find 函数找到第二个相同字符的做法,也包括找第三个、取中间内容,以及结果出错时怎么排查。
读完你能做到三件事:用一条公式定位第二个相同字符,知道什么时候该嵌套、什么时候该换思路,并且会检查结果是否可靠。文中的例子都可以自己复现,把它们输入一个空白表格即可对照。如果你希望在 OmniDoc 桌面客户端里的 UniCell 表格中试算,同样的公式也可以放进去运行。
Excel FIND 函数怎么找到第二个相同字符?一句话结论
FIND 的基本写法是 FIND(要找的字符, 被查找的文本, [起始位置])。它默认从第 1 个字符开始向后找,只返回第一次出现的位置。要找第二个,关键是把第一个位置加 1 当作起始位置,让查找从它的下一个字符开始。
一句话结论:用 =FIND("-",A1,FIND("-",A1)+1) 即可得到第二个短横线的位置,外层 FIND 的第三个参数就是 start_num。
| 你的情况 | 推荐做法 | 原因 |
|---|---|---|
| 只要第一个相同字符的位置 | =FIND("-",A1) | 默认从第 1 位开始查找,直接返回第一次出现的位置 |
| 要第二个相同字符的位置 | =FIND("-",A1,FIND("-",A1)+1) | 把第一个位置加 1 作为起始位置,跳过第一个字符 |
| 要第三个相同字符的位置 | 在上一层外再嵌套一层 FIND | 每多找一个,就把上一层结果加 1 作为新的起始位置 |
| 要第几个不固定,或层数很多 | 用 LEN 与 SUBSTITUTE 计算,或用辅助列逐级记录 | 嵌套层数太多时公式难读也难改,分列记录更直观 |
| 不区分大小写地查找字母 | 改用 SEARCH 函数 | FIND 区分大小写,并且不支持通配符 |
开始之前:先确认这几点
动手写公式前,先确认下面几件事,否则结果很容易不对,而且不容易一眼看出原因。
- 确认字符确实出现了足够多次。如果 A1 里只有一个短横线,找第二个时就会返回错误值,这是正常结果,不是公式写错了。
- 注意 FIND 区分大小写。
FIND("a","Apple")会返回错误,因为原文是大写 A。字母类查找要先确定大小写是否一致。 - 不要把数字当成文本直接比较。如果单元格里的数字是由其他系统导出的,它的显示和实际内容可能不同,建议先用 LEN 看一下字符数是否与你看到的一致。
- 起始位置不能超过文本长度。start_num 大于文本长度时同样返回错误,所以公式里写的起始位置要基于原始文本来算。
- 确认使用的是半角符号。中文输入法下输入的短横线或逗号是全角字符,FIND 会把它当作另一个字符,找不到就会报错。
用 FIND 找第二个短横线并截取中间内容的步骤
下面以 A1 中的 2024-03-15 为例,按步骤找到第二个短横线,并取出中间的月份 03。
- 在一个空白表格的 A1 输入
2024-03-15,作为练习数据。 - 在 B1 输入
=FIND("-",A1),按回车,结果应为5,表示第一个短横线在第 5 位。 - 在 C1 输入
=FIND("-",A1,B1+1),按回车,结果应为8,表示第二个短横线在第 8 位。这里起始位置引用了 B1 的结果并加 1。 - 如果想直接写成一条公式,可以在 D1 输入
=FIND("-",A1,FIND("-",A1)+1),结果同样是8,适合不想设辅助列的情况。 - 要取出两个短横线之间的月份,在 E1 输入
=MID(A1,FIND("-",A1)+1,FIND("-",A1,FIND("-",A1)+1)-FIND("-",A1)-1),结果为03。 - 检查 E1 的结果是否是文本格式。如果希望保留前导零,就保持文本格式;如果要参与计算,再用 VALUE 转换。
- 找第三个短横线时,在外层再包一层:把
FIND("-",A1,FIND("-",A1)+1)整体作为新的起始位置,并加 1。这里的结果应为错误值,因为2024-03-15只有两个短横线。 - 把练习数据换成你的真实数据,先用两三条样本核对,再整列向下填充。
做完后逐项核对
公式算出结果后,建议逐项检查,尤其是批量填充的情况。
| 检查项 | 怎么看 | 有问题怎么办 |
|---|---|---|
| 位置数字是否合理 | 位置应小于或等于文本长度,可以用 LEN 核对 | 如果明显偏大,检查是否把不同单元格的引用混在一起 |
| 错误值是否集中出现 | 找不到字符时显示#VALUE!,看它是否集中在某几行 | 对照这些行的原始文本,看是否缺少该字符,或字符是全角 |
| 数量是否与预期一致 | 用=LEN(A1)-LEN(SUBSTITUTE(A1,"-",""))数出字符出现的次数 | 次数不一致时,先确认 SUBSTITUTE 的查找字符与 FIND 一致 |
| 截取的内容是否完整 | 对比 MID 的结果与原文,确认前后没有多余字符 | 检查截取长度的计算,减一是否漏掉或多减 |
| 大小写是否影响结果 | 随机抽查带字母的行 | 需要忽略大小写时改用 SEARCH,并重新核对 |
📊 核心对比
找字符位置时,常会在 FIND 和 SEARCH 之间犹豫,两者的主要差别如下。
| 对比项 | FIND | SEARCH |
|---|---|---|
| 大小写 | 区分大小写 | 不区分大小写 |
| 通配符 | 不支持 | 支持问号和星号 |
| 适合场景 | 固定格式的编号、代码等精确匹配 | 英文单词或文本不规范的数据 |
| 返回值 | 返回字符位置数字 | 返回字符位置数字 |
| 找不到时 | 返回错误值 | 返回错误值 |
两者都从起始位置向后查找,因此第二个相同字符的写法基本一致,只需按数据情况选择其中一个。
❓ 常见问题(FAQ)
1. FIND 能一次返回所有相同字符的位置吗?
不能。FIND 每次只返回一个位置,要得到全部位置,需要逐个嵌套或用辅助列分别记录第一个、第二个、第三个。字符出现次数不多时,嵌套写法已经够用。
2. 找到第二个后,怎么取出它后面的内容?
把找到的位置作为 MID 或 RIGHT 的起始位置即可。例如要取第二个短横线后面的日期,可以用 =RIGHT(A1,LEN(A1)-FIND("-",A1,FIND("-",A1)+1)),结果为 15。
3. 公式结果显示#VALUE!,是什么原因?
常见原因有三个:要找的字符在文本中不存在、起始位置大于文本长度,或符号是全角而不是半角。先用 LEN 检查文本长度,再确认字符是否真的在原文中。
4. 字符出现次数不固定,怎样统一处理?
先用 LEN 减去 SUBSTITUTE 后的长度算出出现次数,再根据次数决定要找第几个。如果次数差异很大,建议改用辅助列逐级记录位置,比一层层嵌套更容易检查。
📝 总结
在 Excel 中,FIND 函数的第三个参数 start_num 是找第二个、第三个相同字符的关键,把上一个位置加 1 作为起始位置即可。动手前先确认字符是否存在、是否区分大小写,结果出来后用样本数据逐项核对。掌握这些,excel find 函数找到第二个的问题基本就能解决。


