Excel 文本查找与替换 #

函数概览 #

文本查找与替换函数用于在文本中定位特定内容并进行替换操作,是处理复杂文本数据的重要工具。

text
┌─────────────────────────────────────────────────────────────┐
│                    文本查找函数一览                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  FIND      查找位置    =FIND("l", "hello")      → 3         │
│  SEARCH    查找位置    =SEARCH("L", "hello")    → 3         │
│  REPLACE   替换文本    =REPLACE("hello",1,2,"HI") → "HIllo" │
│  SUBSTITUTE 替换文本   =SUBSTITUTE("hello","l","L") → "heLLo"│
│                                                             │
└─────────────────────────────────────────────────────────────┘

FIND 函数 #

语法 #

excel
=FIND(find_text, within_text, [start_num])

参数:
- find_text: 要查找的文本
- within_text: 在哪个文本中查找
- start_num: 开始查找的位置(可选,默认为1)

返回:找到的位置(从1开始),找不到返回 #VALUE!

基本用法 #

excel
=FIND("l", "hello")           → 3     第一个"l"的位置
=FIND("l", "hello", 4)        → 4     从第4位开始找"l"
=FIND("lo", "hello")          → 4     "lo"开始的位置
=FIND("x", "hello")           → #VALUE!  找不到

大小写敏感 #

excel
=FIND("L", "hello")           → #VALUE!  区分大小写
=FIND("l", "hello")           → 3
=FIND("L", "HELLO")           → 3

实际应用 #

excel
提取@前的用户名:
=LEFT(A1, FIND("@", A1)-1)

提取@后的域名:
=RIGHT(A1, LEN(A1)-FIND("@", A1))

提取第一个空格前的词:
=LEFT(A1, FIND(" ", A1)-1)

实际示例 #

text
邮箱处理:
    A                     B              C
1   邮箱                  用户名         域名
2   zhang@example.com     =LEFT(A2, FIND("@", A2)-1)  → "zhang"
                          =RIGHT(A2, LEN(A2)-FIND("@", A2))  → "example.com"

查找第N次出现的位置 #

excel
查找第二个"l"的位置:
=FIND("l", "hello", FIND("l", "hello")+1)  → 4

查找第三个"l"的位置:
=FIND("l", "hello world", FIND("l", "hello world", FIND("l", "hello world")+1)+1)

SEARCH 函数 #

语法 #

excel
=SEARCH(find_text, within_text, [start_num])

与 FIND 类似,但不区分大小写,支持通配符

基本用法 #

excel
=SEARCH("l", "hello")         → 3
=SEARCH("L", "hello")         → 3     不区分大小写
=SEARCH("l", "HELLO")         → 3     不区分大小写
=SEARCH("l?o", "hello")       → 3     支持通配符
=SEARCH("x", "hello")         → #VALUE!

通配符支持 #

excel
? - 匹配任意单个字符
* - 匹配任意多个字符

=SEARCH("l?o", "hello")       → 3     匹配 "llo"
=SEARCH("h*o", "hello")       → 1     匹配 "hello"
=SEARCH("?e?", "hello")       → 1     匹配 "hel"
特性 FIND SEARCH
大小写敏感
通配符支持
返回值 位置 位置
找不到时 #VALUE! #VALUE!

实际应用 #

excel
不区分大小写查找:
=SEARCH("excel", "Learn EXCEL functions")  → 7

检查是否包含某文本:
=IF(ISNUMBER(SEARCH("excel", A1)), "包含", "不包含")

实际示例 #

text
检查关键词:
    A                        B
1   文本                     是否包含"excel"
2   Learn EXCEL functions    =ISNUMBER(SEARCH("excel", A2))  → TRUE
3   Learn Python             =ISNUMBER(SEARCH("excel", A3))  → FALSE

REPLACE 函数 #

语法 #

excel
=REPLACE(old_text, start_num, num_chars, new_text)

参数:
- old_text: 原文本
- start_num: 开始替换的位置
- num_chars: 要替换的字符数
- new_text: 替换为的文本

基本用法 #

excel
=REPLACE("hello", 1, 2, "HI")      → "HIllo"    替换前2个字符
=REPLACE("hello", 2, 3, "abc")     → "habco"    从第2位替换3个字符
=REPLACE("hello", 6, 0, " world")  → "hello world"  插入文本
=REPLACE("hello", 1, 5, "")        → ""         删除文本

实际应用 #

excel
隐藏手机号中间4位:
=REPLACE(A1, 4, 4, "****")

隐藏身份证中间8位:
=REPLACE(A1, 7, 8, "********")

插入分隔符:
=REPLACE(A1, 4, 0, "-")  在第4位插入横线

实际示例 #

text
手机号隐藏:
    A              B
1   手机号         隐藏后
2   13812345678    =REPLACE(A2, 4, 4, "****")  → "138****5678"

身份证隐藏:
    A                   B
1   身份证号            隐藏后
2   110101199001011234  =REPLACE(A2, 7, 8, "********")  → "110101********1234"

动态替换 #

excel
从某个字符开始替换到结尾:
=REPLACE(A1, FIND("@", A1), LEN(A1), "@newdomain.com")

替换特定位置后的内容:
=REPLACE(A1, 5, LEN(A1)-4, "...")

SUBSTITUTE 函数 #

语法 #

excel
=SUBSTITUTE(text, old_text, new_text, [instance_num])

参数:
- text: 原文本
- old_text: 要替换的文本
- new_text: 替换为的文本
- instance_num: 替换第几个(可选,默认全部)

基本用法 #

excel
=SUBSTITUTE("hello world", "world", "Excel")  → "hello Excel"
=SUBSTITUTE("aaa", "a", "b")                  → "bbb"  全部替换
=SUBSTITUTE("aaa", "a", "b", 1)               → "baa"  只替换第1个
=SUBSTITUTE("aaa", "a", "b", 2)               → "aba"  只替换第2个
=SUBSTITUTE("hello", "x", "y")                → "hello"  找不到则不变

实际应用 #

excel
删除特定字符:
=SUBSTITUTE(A1, "-", "")        删除所有横线
=SUBSTITUTE(A1, " ", "")        删除所有空格
=SUBSTITUTE(A1, CHAR(10), "")   删除换行符

替换分隔符:
=SUBSTITUTE(A1, ",", "-")       逗号改为横线

计算某字符出现次数:
=LEN(A1)-LEN(SUBSTITUTE(A1, "a", ""))

实际示例 #

text
删除空格:
    A              B
1   原文本         删除空格后
2   "hello world"  =SUBSTITUTE(A2, " ", "")  → "helloworld"

计算字符出现次数:
    A              B
1   文本           "a"出现次数
2   "banana"       =LEN(A2)-LEN(SUBSTITUTE(A2, "a", ""))  → 3

REPLACE vs SUBSTITUTE #

excel
REPLACE:按位置替换
=REPLACE("hello world", 7, 5, "Excel")  → "hello Excel"

SUBSTITUTE:按内容替换
=SUBSTITUTE("hello world", "world", "Excel")  → "hello Excel"

选择原则:
- 知道位置用 REPLACE
- 知道内容用 SUBSTITUTE

函数组合应用 #

提取两个分隔符之间的内容 #

excel
文本:A1 = "姓名:张三;年龄:25"

提取姓名:
=MID(A1, FIND(":", A1)+1, FIND(";", A1)-FIND(":", A1)-1)
→ "张三"

提取年龄:
=MID(A1, FIND(":", A1, FIND(";", A1)+1)+1, LEN(A1)-FIND(":", A1, FIND(";", A1)+1))
→ "25"

分割姓名 #

excel
姓名:张三

姓:=LEFT(A1, 1)              → "张"
名:=RIGHT(A1, LEN(A1)-1)     → "三"

姓名:欧阳锋(复姓)

姓:=LEFT(A1, 2)              → "欧阳"
名:=RIGHT(A1, LEN(A1)-2)     → "锋"

提取文件名和扩展名 #

excel
文件:report.xlsx

文件名:=LEFT(A1, FIND(".", A1)-1)           → "report"
扩展名:=RIGHT(A1, LEN(A1)-FIND(".", A1))    → "xlsx"

带路径的文件:C:\Users\Documents\report.xlsx

文件名:
=MID(A1, FIND("*", SUBSTITUTE(A1, "\", "*", LEN(A1)-LEN(SUBSTITUTE(A1, "\", ""))))+1, LEN(A1))
→ "report.xlsx"

格式化电话号码 #

excel
原始:13812345678

方法1(使用 REPLACE):
=REPLACE(REPLACE(A1, 4, 0, "-"), 9, 0, "-")
→ "138-1234-5678"

方法2(使用 TEXT):
=TEXT(A1, "000-0000-0000")
→ "138-1234-5678"

方法3(使用 LEFT/MID/RIGHT):
=LEFT(A1, 3) & "-" & MID(A1, 4, 4) & "-" & RIGHT(A1, 4)
→ "138-1234-5678"

计算单词数 #

excel
=LEN(TRIM(A1))-LEN(SUBSTITUTE(TRIM(A1), " ", ""))+1

原理:
1. TRIM 清除多余空格
2. 计算总字符数
3. 删除所有空格后计算字符数
4. 差值就是空格数,单词数 = 空格数 + 1

提取第N个词 #

excel
提取第1个词:
=TRIM(LEFT(A1, FIND(" ", A1&" ")-1))

提取第2个词:
=TRIM(MID(A1, FIND(" ", A1)+1, FIND(" ", A1, FIND(" ", A1)+1)-FIND(" ", A1)-1))

提取第N个词(使用 FILTERXML,Excel 2013+):
=FILTERXML("<t><s>" & SUBSTITUTE(A1, " ", "</s><s>") & "</s></t>", "//s[" & N & "]")

实战案例 #

案例1:解析CSV格式数据 #

text
数据:
    A                    B          C          D
1   原数据               字段1      字段2      字段3
2   "张三,男,25岁"       张三       男         25岁

字段1:=LEFT(A2, FIND(",", A2)-1)  → "张三"
字段2:=MID(A2, FIND(",", A2)+1, FIND(",", A2, FIND(",", A2)+1)-FIND(",", A2)-1)  → "男"
字段3:=RIGHT(A2, LEN(A2)-FIND(",", A2, FIND(",", A2)+1))  → "25岁"

案例2:处理URL参数 #

text
URL:https://example.com?name=zhangsan&age=25

提取name参数值:
=MID(A1, FIND("name=", A1)+5, FIND("&", A1&"&", FIND("name=", A1))-FIND("name=", A1)-5)
→ "zhangsan"

提取age参数值:
=MID(A1, FIND("age=", A1)+4, LEN(A1)-FIND("age=", A1)-3)
→ "25"

案例3:批量替换多个字符 #

text
需求:将多个字符替换为其他字符

原文本:A1 = "Hello-World_2024"

方法:嵌套 SUBSTITUTE
=SUBSTITUTE(SUBSTITUTE(A1, "-", " "), "_", " ")
→ "Hello World 2024"

替换多个字符:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, "-", ""), "_", ""), " ", "")
→ "HelloWorld2024"

案例4:提取括号内容 #

text
文本:产品名称(规格)

提取括号内容:
=MID(A1, FIND("(", A1)+1, FIND(")", A1)-FIND("(", A1)-1)

提取括号前的内容:
=LEFT(A1, FIND("(", A1)-1)

高级技巧 #

查找最后一个出现位置 #

excel
查找最后一个空格的位置:
=LOOKUP(1, 0/(MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)=" "), ROW(INDIRECT("1:"&LEN(A1))))

或(Excel 365):
=MAX(IF(MID(A1, SEQUENCE(LEN(A1)), 1)=" ", SEQUENCE(LEN(A1))))

提取最后一个词 #

excel
=RIGHT(A1, LEN(A1)-LOOKUP(1, 0/(MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)=" "), ROW(INDIRECT("1:"&LEN(A1)))))

批量查找多个关键词 #

excel
检查是否包含任意一个关键词:
=OR(ISNUMBER(SEARCH({"Excel", "Word", "PPT"}, A1)))

检查包含几个关键词:
=SUMPRODUCT(--ISNUMBER(SEARCH({"Excel", "Word", "PPT"}, A1)))

小结 #

文本查找与替换函数是处理复杂文本数据的利器:

函数 用途 示例
FIND 查找位置(区分大小写) =FIND("l", "hello")
SEARCH 查找位置(不区分大小写) =SEARCH("L", "hello")
REPLACE 按位置替换 =REPLACE("hello", 1, 2, "HI")
SUBSTITUTE 按内容替换 =SUBSTITUTE("hello", "l", "L")

接下来,让我们学习 日期与时间函数,掌握日期时间处理技巧。

最后更新:2026-04-11