跳到主要内容

trim

一、函数概览​

1. 函数简介表​

函数语法功能返回类型
TRIM()=TRIM(text)删除文本首尾空格,多个空格变单个文本
LEFT()=LEFT(text, [num_chars])提取文本左侧字符文本
RIGHT()=RIGHT(text, [num_chars])提取文本右侧字符文本
MID()=MID(text, start_num, num_chars)提取文本中间字符文本

2. 重要特性​

  • 所有函数都返回文本类型
  • 对中英文、数字、符号都有效
  • 可以嵌套使用
  • 处理中文时,一个汉字算一个字符

二、详细示例数据表​

表1:客户信息表(含空格问题)​

客户ID客户姓名联系电话地址信息备注
C001张 明138 0013 8001北京市 海淀区 中关村大街VIP客户
C002李 华139-1234-5678上海市 浦东新区陆家嘴新客户
C003王 芳(010)87654321广州市 天河区 体育西路长期合作
C004赵 强13755556666深圳市南山区科技园紧急订单
C005孙 丽1367890 1234成都市 锦江区 春熙路

表2:产品编码解析表​

原始编码产品名称完整描述
IPHONE-15-PRO-MAX-256-BLACKiPhone 15 Pro MaxApple iPhone 15 Pro Max 256GB 黑色
HW-P60-PRO-512-GREEN华为P60 Pro华为P60 Pro 5G 手机 512GB 翡冷翠
MB-AIR-M2-2023-GOLDMacBook AirApple MacBook Air M2 2023款 金色
MI-13-ULTRA-256-BLUE小米13 Ultra小米13 Ultra 徕卡影像 256GB 蓝色
SN-WH1000XM5-BLACK索尼耳机Sony WH-1000XM5 无线降噪耳机 黑色

表3:身份证信息表​

姓名身份证号出生日期性别户籍地址
张三1101011990030756781990-03-07男北京市东城区
李四3101041991051289121991-05-12女上海市徐汇区
王五4403051992081534561992-08-15男广州市福田区
赵六3301061985122043211985-12-20女杭州市西湖区
孙七4201111995100878901995-10-08男武汉市江汉区

表4:员工工号解析表​

工号姓名部门代码入职年份序列号
IT2023001张明IT2023001
SALES2022125李华SALES2022125
HR2021010王芳HR2021010
FIN2020056赵强FIN2020056
MKT2023111孙丽MKT2023111

三、TRIM() 函数详解​

1. 基础用法​

=TRIM(" Hello World ") // 返回:"Hello World"
=TRIM(" Excel 2024 ") // 返回:"Excel 2024"
=TRIM("A B C") // 返回:"A B C"
=TRIM(CHAR(160)) // 删除不间断空格(ASCII 160)

2. 实际应用示例​

示例1:清洗客户姓名空格​

在表1的F列(清洗后姓名):
=TRIM(B2)

结果:
" 张 明 " → "张 明" // 保留姓名中间必要空格
"李 华 " → "李 华"
" 王 芳 " → "王 芳"

示例2:标准化联系电话​

在表1的G列(清洗后电话):
=TRIM(C2)

结果:
"138 0013 8001" → "138 0013 8001" // 中间空格保留
"139-1234-5678" → "139-1234-5678" // 无变化
"(010)87654321" → "(010)87654321" // 无变化

示例3:处理备注信息​

在表1的H列(清洗后备注):
=TRIM(E2)

结果:
"VIP客户" → "VIP客户"
"新客户" → "新客户"
" 长期合作 " → "长期合作"
""(空字符串) → ""(空字符串)

3. 特殊空格处理​

常规空格(ASCII 32):TRIM可以清除
不间断空格(ASCII 160):TRIM可以清除
制表符等:TRIM无法清除,需用CLEAN或SUBSTITUTE

组合使用:
=TRIM(CLEAN(A2)) // 删除不可打印字符和空格
=TRIM(SUBSTITUTE(A2, CHAR(9), " ")) // 替换制表符为空格

四、LEFT() 函数详解​

1. 基础用法​

=LEFT("Hello World", 5) // 返回:"Hello"
=LEFT("Excel2024", 5) // 返回:"Excel"
=LEFT("你好世界", 2) // 返回:"你好"
=LEFT(A2, 3) // 返回A2前3个字符
=LEFT(A2) // 省略参数,默认返回第1个字符

2. 实际应用示例​

示例1:提取产品品牌​

在表2的D列(品牌):
=LEFT(A2, FIND("-", A2)-1)

结果:
"IPHONE-15-PRO-MAX-256-BLACK" → "IPHONE"
"HW-P60-PRO-512-GREEN" → "HW"
"MB-AIR-M2-2023-GOLD" → "MB"

示例2:提取员工部门​

在表4的F列(提取部门):
=LEFT(A2, FIND("202", A2)-1)

结果:
"IT2023001" → "IT"
"SALES2022125" → "SALES"
"HR2021010" → "HR"

示例3:提取姓名姓氏​

假设中文姓名2-3个字:

在表1的I列(姓氏):
=LEFT(TRIM(B2), 1)

结果:
"张 明" → "张"
"李 华" → "李"
"王 芳" → "王"

3. 动态长度提取​

提取到第一个空格前:
=LEFT(A2, FIND(" ", A2 & " ")-1)

安全提取(避免错误):
=IFERROR(LEFT(A2, FIND("-", A2)-1), A2)

五、RIGHT() 函数详解​

1. 基础用法​

=RIGHT("Hello World", 5) // 返回:"World"
=RIGHT("Excel2024", 4) // 返回:"2024"
=RIGHT("你好世界", 2) // 返回:"世界"
=RIGHT(A2, 3) // 返回A2后3个字符
=RIGHT(A2) // 省略参数,默认返回第1个字符

2. 实际应用示例​

示例1:提取文件扩展名​

假设A2="report_2024.xlsx"
=RIGHT(A2, LEN(A2) - FIND(".", A2))

结果:"report_2024.xlsx" → ".xlsx"

更精确:
=MID(A2, FIND(".", A2), 255)

示例2:提取手机尾号​

在表1的J列(手机尾号):
=RIGHT(TRIM(C2), 4)

结果:
"138 0013 8001" → "8001"
"139-1234-5678" → "5678"
"13755556666" → "6666"

示例3:提取产品颜色​

在表2的E列(颜色):
=TRIM(RIGHT(A2, LEN(A2) - FIND("-BLACK", A2) + 1))

但更好的方法(最后一个"-"后的内容):
=TRIM(RIGHT(SUBSTITUTE(A2, "-", REPT(" ", 100)), 100))

结果:
"IPHONE-15-PRO-MAX-256-BLACK" → "BLACK"
"HW-P60-PRO-512-GREEN" → "GREEN"

3. 结合LEN使用​

提取最后N个字符(忽略某些字符):
=RIGHT(A2, LEN(A2) - 3) // 去掉前3个字符
=RIGHT(A2, LEN(A2) - FIND(":", A2)) // 去掉冒号前的内容

六、MID() 函数详解​

1. 基础用法​

=MID("Hello World", 7, 5) // 返回:"World"
=MID("Excel2024", 6, 4) // 返回:"2024"
=MID("你好世界", 3, 2) // 返回:"世界"
=MID(A2, 4, 3) // 从A2第4个字符开始取3个
=MID(A2, 2, 100) // 取从第2个字符开始的所有字符

2. 实际应用示例​

示例1:提取身份证出生日期​

在表3的C列(提取出生日期):
=MID(B2, 7, 8)

结果:
"110101199003075678" → "19900307"

格式化为日期:
=DATE(--MID(B2, 7, 4), --MID(B2, 11, 2), --MID(B2, 13, 2))

示例2:提取产品容量​

在表2的F列(容量):
=MID(A2, FIND("-256-", A2) + 1, 3) // 找"-256-"模式

但更通用:
=MID(A2,
FIND("-", A2, FIND("-", A2, FIND("-", A2) + 1) + 1) + 1,
FIND("-", A2, FIND("-", A2, FIND("-", A2, FIND("-", A2) + 1) + 1) + 1) -
FIND("-", A2, FIND("-", A2, FIND("-", A2) + 1) + 1) - 1)

简化:假设容量在第4段
=TRIM(MID(SUBSTITUTE(A2, "-", REPT(" ", 100)), 400, 100))

示例3:提取员工入职年份​

在表4的G列(入职年份):
=MID(A2, LEN(F2) + 1, 4) // F2是部门代码

或者:
=MID(A2, FIND("202", A2), 4)

结果:
"IT2023001" → "2023"
"SALES2022125" → "2022"

3. 复杂提取技巧​

提取两个分隔符之间的内容:
=MID(A2,
FIND("【", A2) + 1,
FIND("】", A2) - FIND("【", A2) - 1)

七、函数组合应用​

组合1:完整姓名拆分​

数据:A2="张 明"
姓氏:=LEFT(A2, 1) // 张
名字:=TRIM(MID(A2, 2, 100)) // 明

数据:A2="欧阳 明日"
姓氏:=LEFT(A2, FIND(" ", A2)-1) // 欧阳
名字:=TRIM(MID(A2, FIND(" ", A2)+1, 100)) // 明日

组合2:标准化产品编码​

原始:A2=" iphone-15-pro-max "
标准化:
=UPPER(TRIM(A2)) // IPHONE-15-PRO-MAX

提取型号:
=MID(TRIM(A2), FIND("-", TRIM(A2))+1, 2) // 15

组合3:智能提取地址​

数据:A2="北京市海淀区中关村大街1号"
提取省市:
=LEFT(A2, FIND("市", A2)) // 北京市
提取区:
=MID(A2, FIND("市", A2)+1, FIND("区", A2)-FIND("市", A2)) // 海淀区

组合4:解析复杂字符串​

数据:A2="订单号:ORD20240102001,金额:¥1,580.00"
提取订单号:
=MID(A2, FIND(":", A2)+1, FIND(",", A2)-FIND(":", A2)-1) // ORD20240102001
提取金额:
=--TRIM(MID(A2, FIND("¥", A2)+1, 100)) // 1580

八、实际工作场景应用​

场景1:数据清洗标准化流程​

案例:清洗客户数据库​

原始数据在A列(混乱的客户信息)

清洗步骤:
1. B列:去空格 =TRIM(A2)
2. C列:提取姓名 =TRIM(LEFT(B2, FIND(" ", B2 & " ")))
3. D列:提取电话 =TRIM(MID(B2, LEN(C2)+1, 11))
4. E列:标准化电话 =SUBSTITUTE(D2, " ", "")
5. F列:验证格式 =IF(LEN(E2)=11, "有效", "无效")

场景2:产品编码解析系统​

案例:解析SKU编码​

编码规则:品牌-型号-颜色-尺寸-批次

A2="NIKE-AJ1-RED-42-202312"
解析:
品牌:=LEFT(A2, FIND("-", A2)-1) // NIKE
型号:=MID(A2, FIND("-", A2)+1,
FIND("-", A2, FIND("-", A2)+1)-FIND("-", A2)-1) // AJ1
颜色:=MID(A2,
FIND("-", A2, FIND("-", A2, FIND("-", A2)+1)+1)+1,
FIND("-", A2, FIND("-", A2, FIND("-", A2, FIND("-", A2)+1)+1)+1)-
FIND("-", A2, FIND("-", A2, FIND("-", A2)+1)+1)-1) // RED

场景3:身份证信息提取系统​

案例:批量提取身份证信息​

A列:身份证号
提取信息:
出生日期:=TEXT(DATE(--MID(A2,7,4),--MID(A2,11,2),--MID(A2,13,2)), "yyyy年mm月dd日")
性别:=IF(MOD(--MID(A2,17,1),2)=1, "男", "女")
年龄:=DATEDIF(DATE(--MID(A2,7,4),--MID(A2,11,2),--MID(A2,13,2)), TODAY(), "Y")
籍贯:=VLOOKUP(LEFT(A2,6), 行政区划表!A:B, 2, FALSE)

场景4:日志文件分析​

案例:解析服务器日志​

日志格式:[时间] IP 方法 路径 状态码

A2="[2024-01-02 14:30:45] 192.168.1.1 GET /api/data 200"
提取:
时间:=TRIM(MID(A2, 2, FIND("]", A2)-2))
IP:=TRIM(MID(A2, FIND("]", A2)+1, FIND(" ", A2, FIND("]", A2)+1)-FIND("]", A2)-1))
方法:=TRIM(MID(A2, FIND(" ", A2, FIND("]", A2)+1)+1,
FIND(" ", A2, FIND(" ", A2, FIND("]", A2)+1)+1)-
FIND(" ", A2, FIND("]", A2)+1)-1))

九、常见问题与解决方案​

问题1:FIND函数返回错误​

现象:=LEFT(A2, FIND("-", A2)-1) 返回#VALUE!
原因:找不到"-"
解决:=IFERROR(LEFT(A2, FIND("-", A2)-1), A2)
或:=LEFT(A2, FIND("-", A2 & "-")-1)

问题2:中英文混合处理​

LEN函数:中文和英文都算1个字符
LENB函数:中文算2个字符,英文算1个字符

提取前N个字符(按字节):
=LEFT(A2, LEN(A2)-INT((LENB(A2)-N)/2))

问题3:TRIM无法清除的空格​

清除所有空白字符:
=TRIM(CLEAN(SUBSTITUTE(A2, CHAR(160), " ")))

问题4:提取动态长度内容​

提取两个特定字符之间的内容:
=MID(A2,
FIND("【", A2) + 1,
IFERROR(FIND("】", A2), LEN(A2)+1) - FIND("【", A2) - 1)

问题5:性能优化​

大数据量时避免重复计算:
使用辅助列存储中间结果
避免在数组公式中频繁调用文本函数

十、高级技巧与应用​

技巧1:使用REPT函数辅助提取​

提取最后一个"-"后的内容:
=TRIM(RIGHT(SUBSTITUTE(A2, "-", REPT(" ", 100)), 100))

提取第N个"-"后的内容(如第3段):
=TRIM(MID(SUBSTITUTE(A2, "-", REPT(" ", 100)), 300, 100))

技巧2:使用LET函数简化复杂公式​

=LET(
text, TRIM(A2),
dash1, FIND("-", text),
dash2, FIND("-", text, dash1+1),
dash3, FIND("-", text, dash2+1),
品牌, LEFT(text, dash1-1),
型号, MID(text, dash1+1, dash2-dash1-1),
颜色, MID(text, dash3+1, 100),
品牌 & "|" & 型号 & "|" & 颜色
)

技巧3:创建文本解析函数​

解析URL:
=LET(
url, A2,
protocol, IFERROR(LEFT(url, FIND("://", url)-1), ""),
domain, IFERROR(MID(url, FIND("://", url)+3,
MIN(IFERROR(FIND("/", url, FIND("://", url)+3), LEN(url)+1),
IFERROR(FIND("?", url, FIND("://", url)+3), LEN(url)+1))-
(FIND("://", url)+3)), ""),
protocol & " | " & domain
)

技巧4:正则表达式模拟​

提取所有数字:
=TEXTJOIN("", TRUE,
IFERROR(--MID(A2, ROW(INDIRECT("1:"&LEN(A2))), 1), ""))
数组公式,按Ctrl+Shift+Enter

技巧5:动态提取表头​

从"姓名:张三,年龄:25,城市:北京"提取:
姓名:=TRIM(MID(SUBSTITUTE(SUBSTITUTE(A2, ",", ";"), ":", ":"),
FIND("姓名:", SUBSTITUTE(SUBSTITUTE(A2, ",", ";"), ":", ":"))+3,
FIND(";年龄", SUBSTITUTE(SUBSTITUTE(A2, ",", ";"), ":", ":"))-
FIND("姓名:", SUBSTITUTE(SUBSTITUTE(A2, ",", ";"), ":", ":"))-3))

十一、综合实战练习​

练习1:客户信息完整清洗​

原始数据:A2=" 张 明 ,138-0013-8001,北京市海淀区 ,VIP "

要求:

  1. 拆分姓名、电话、地址、备注
  2. 标准化格式
  3. 验证数据有效性

解决方案:

B2(清洗后):=TRIM(A2)
C2(姓名):=TRIM(LEFT(B2, FIND(",", B2)-1))
D2(电话):=SUBSTITUTE(TRIM(MID(B2, FIND(",", B2)+1,
FIND(",", B2, FIND(",", B2)+1)-FIND(",", B2)-1)), "-", "")
E2(地址):=TRIM(MID(B2, FIND(",", B2, FIND(",", B2)+1)+1,
FIND(",", B2, FIND(",", B2, FIND(",", B2)+1)+1)-
FIND(",", B2, FIND(",", B2)+1)-1))
F2(备注):=TRIM(RIGHT(B2, LEN(B2)-FIND(",", B2, FIND(",", B2, FIND(",", B2)+1)+1)))
G2(电话验证):=IF(AND(LEN(D2)=11, ISNUMBER(--D2)), "有效", "无效")

练习2:生成标准化SKU​

要求:从产品描述生成标准SKU

输入:A2="Apple iPhone 15 Pro Max 256GB 黑色" 输出:B2="APPLE-IPHONE-15-PRO-MAX-256GB-BLACK"

公式:

=UPPER(SUBSTITUTE(TRIM(A2), " ", "-"))

练习3:智能地址解析​

输入:A2="广东省深圳市南山区科技园南区R2栋B座3楼301室" 输出:

  • 省份:广东省
  • 城市:深圳市
  • 区:南山区
  • 详细地址:科技园南区R2栋B座3楼301室

公式:

省份:=LEFT(A2, FIND("省", A2)) // 广东省
城市:=MID(A2, FIND("省", A2)+1, FIND("市", A2)-FIND("省", A2)) // 深圳市
区:=MID(A2, FIND("市", A2)+1, FIND("区", A2)-FIND("市", A2)) // 南山区
详细地址:=TRIM(MID(A2, FIND("区", A2)+1, 100)) // 科技园南区R2栋B座3楼301室

十二、性能优化建议​

1. 减少函数嵌套​

不好:=TRIM(LEFT(MID(A2, FIND("-", A2)+1, 100), FIND("-", MID(A2, FIND("-", A2)+1, 100))-1))
好:使用辅助列分步计算

2. 使用表格引用​

转换区域为表格(Ctrl+T)
使用结构化引用:[@字段名]
便于维护和复制

3. 批量处理原则​

使用填充柄复制公式
避免手动逐个输入
对于复杂清洗,考虑使用Power Query

4. 缓存中间结果​

计算密集型操作,先存到辅助列
后续公式引用辅助列结果

十三、版本兼容性​

函数Excel 2003Excel 2007Excel 2010+Excel 365
TRIM✓✓✓✓
LEFT✓✓✓✓
RIGHT✓✓✓✓
MID✓✓✓✓
TEXTJOIN✗✗2019+✓
LET✗✗✗365

最佳实践:

  • 四个基础函数全版本兼容
  • 可安全使用
  • 复杂需求考虑使用新函数提升效率

十四、总结与记忆技巧​

函数对比总结​

函数作用记忆口诀适用场景
TRIM()去空格两边空格去掉,中间只留一个数据清洗,用户输入
LEFT()取左边从头开始取,要几个给几个提取代码、前缀、姓氏
RIGHT()取右边从尾往前取,倒着数几个提取扩展名、尾号、后缀
MID()取中间指定位置取,灵活又自由提取身份证日期、中间段

参数记忆​

LEFT/RIGHT:先文本,后数量(数量可省)
MID:先文本,再位置,后数量
TRIM:只要文本,干净利落

使用原则​

  1. 先清洗,后提取:先用TRIM清理数据
  2. 先验证,后处理:检查数据格式是否一致
  3. 先简单,后复杂:从简单提取开始,逐步增加复杂度
  4. 先手动,后自动:先用简单案例测试,再批量处理

常见错误避免​

  1. 忘记处理可能不存在的情况(使用IFERROR)
  2. 忽略中英文差异(注意LEN和LENB)
  3. 硬编码提取位置(使用FIND动态定位)
  4. 忘记TRIM导致空格影响查找

一句话总结​

TRIM()是清洁工,LEFT()和RIGHT()是左右护法,MID()是万能钥匙——它们一起组成了Excel文本处理的"神雕侠侣",能帮你解决90%的文本处理问题!