ARTICLE · 1283775
Excel VBA编程-一键清理文本
Excel VBA编程-一键清理文本
上一讲我们用 VBA「一键从文本里提取指定内容」,把长文本里想要的那一截精准揪了出来。但办公里还有一类更隐蔽、也更气人的麻烦:文本表面看着一样,其实前后多了空格、或者大小写乱七八糟——比如从网页复制来的名字" 张三 "前后带空格、英文产品名"iPhone"有人写成"iphone"有人写"IPhone"。结果就是 VLOOKUP 明明该对上却对不上、统计有人没算进去、导入别的系统直接报错。这种"看不见的脏",手动去一个个改又慢又漏。用 VBA 写一段,一键就把它们收拾干净,才叫真正省事。
这一讲我们从网络上整理了一批 Excel VBA「清理文本」的实用技巧,核心就三句话:用 Trim 去掉首尾空格、用 UCase 转成大写、用 LCase 转成小写。这是 sam308 的 General Excel VBA Utilities、SuperExcelVBA 的 Strings 教程、TechBloat 的大小写实战、以及中文站 vba.zaixianjisuan 都公认最适合零基础的写法。其中 SuperExcelVBA 特别点出:大小写不统一是数据标准化的头号麻烦——从不同来源粘来的英文名大小写乱七八糟,会导致 VLOOKUP 对不上、统计出错;sam308 和 TechBloat 都强调清理前先备份、在样本上先试。把这些揉成 3 个由浅入深的案例。
(小前提:下面所有代码都假设你当前打开的那张表就是你要处理的表。运行前先把表点成「当前表」。清理会直接改掉原单元格,动手前强烈建议先另存一份副本!)
【SVG 示意图】
案例一(简单):一键清除 A 列首尾空格
功能说明 这是最基础的「去空格」。你只要把数据放在 A 列(第一行是标题),运行这一段,Excel 就会从 A 列第 2 行开始,把每个单元格前后多余的空格清掉——" 张三 "就变成"张三"、" 李四 "就变成"李四",一直处理到数据最后一行。原单元格内容被直接改掉,最后弹窗提示完成。
代码
Sub 清除A列首尾空格() ' 把 A 列(第1列)从第2行到最后一行,首尾多余空格一键清掉 Dim 末行 As Long Dim i As Long 末行 = Cells(Rows.Count, 1).End(xlUp).Row ' 自动找 A 列最后一行 For i = 2 To 末行 Cells(i, 1).Value = Trim(Cells(i, 1).Value) Next i MsgBox "A 列首尾空格已清除!", vbInformationEnd Sub操作步骤
在 Excel 里准备好一张表:A 列放带了前后空格的文本(如" 张三 "、" 李四 "…),第一行是标题(如"姓名"),下面若干行数据。 按 Alt + F11打开 VBA 编辑器,点菜单「插入」→「模块」,把上面的代码整段粘进去。回到 Excel,点一下你的数据表让它成为「当前表」,按 Alt + F 8,选中「清除A列首尾空格」,点「运行」。程序会从第 2 行扫到最后一行,把每行前后空格清掉,最后弹窗提示完成。 再去看 A 列," 张三 "就已经变成干净的"张三"了。
小提示:
Trim(文本)只去掉**首尾(前后)**的空格,不会动到单词中间的空格;它自己不会改变原内容,必须像Cells(i,1).Value = Trim(...)这样"把处理结果写回去"才会生效。End(xlUp)自动找最后一行,表加行减行都不用改代码。
案例二(中等):运行时自选列与模式(去空格 / 转大写 / 转小写)
功能说明 案例一的列和动作都写死在代码里。这个案例改成:运行后弹框让你输入「要清理的列号」和「模式」。模式分三种——输 1 去首尾空格、输 2 转大写、输 3 转小写。程序会自动找到那一列的末行,按你选的模式批量处理——不管你清哪一列、想怎么清,都不用手改代码。任一框没填,程序会提示并自动停下。
代码
Sub 清理指定列() ' 运行后输入列号、选择模式(1去空格/2转大写/3转小写),清理该列 Dim 列号 As Long Dim 模式 As String Dim 末行 As Long Dim i As Long Dim 原值 As String 列号 = Val(InputBox("请输入要清理的列号(数字,1 表示 A 列,2 表示 B 列):", "选择列")) 模式 = InputBox("请输入模式:1=去首尾空格,2=转大写,3=转小写", "选择模式") 末行 = Cells(Rows.Count, 列号).End(xlUp).Row For i = 2 To 末行 原值 = Cells(i, 列号).Value If 模式 = "1" Then Cells(i, 列号).Value = Trim(原值) ElseIf 模式 = "2" Then Cells(i, 列号).Value = UCase(原值) ElseIf 模式 = "3" Then Cells(i, 列号).Value = LCase(原值) End If Next i MsgBox "清理完成!", vbInformationEnd Sub操作步骤
把代码粘进同一个模块(和案例一放一起也行)。表里准备一张要清理的数据做测试(如 B 列是大小写乱掉的英文产品名"iPhone"、"IPhone"、"iphone")。 回到 Excel,点一下数据表让它成为「当前表」,按 Alt + F 8运行「清理指定列」。第一个框输入列号(如 2表示 B 列),第二个框输入模式(如2表示转大写),点「确定」。程序自动找到该列末行,把整列按你选的模式处理完,弹窗提示完成。 想换列或换模式,重新运行再输一次即可,不用改任何代码。
关键点:用
Val(InputBox(...))把弹框里输入的文字变成数字列号,后面Cells(i, 列号)才能定位。If 模式 = "1" ... ElseIf 模式 = "2" ...是三选一的分支——注意这里比的是文字"1""2""3",要和输入完全一致。UCase转大写、LCase转小写,同样"算完要写回去"才生效。
案例三(实用小案例):一键批量清理 A 列并报告改了几格
功能说明 前面两个案例都是"做一件事"。这个案例做一个更实用的组合:先把 A 列每行去掉首尾空格,再统一转成大写,并且统计一共改了几个单元格——最后弹窗告诉你"清理了多少格",一眼看出这次整理动了多少数据。对"张三"" 张三 ""ZHANG三"这种混着空格和大小写的脏数据,跑一次就全归一了。
代码
Sub 批量清理并统计() ' 把 A 列每行:先去首尾空格,再转大写;并统计一共改了几个单元格 Dim 末行 As Long Dim i As Long Dim 改数 As Long Dim 原值 As String Dim 新值 As String 改数 = 0 末行 = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To 末行 原值 = Cells(i, 1).Value 新值 = Trim(原值) ' 先去掉首尾空格 新值 = UCase(新值) ' 再转成大写 If 新值 <> 原值 Then Cells(i, 1).Value = 新值 改数 = 改数 + 1 End If Next i MsgBox "共清理了 " & 改数 & " 个单元格(去空格并转大写)!", vbInformationEnd Sub操作步骤
把代码粘进模块(和前两个可以放在同一个模块里)。准备一张 A 列是混着空格和大小写的姓名/编号的表(如" 张三 "、"zhangsan"、"LI SI"…),B 列留空方便对照。 点一下数据表让它成为「当前表」,按 Alt + F 8运行「批量清理并统计」。程序把每行先去空格、再转大写,和原值不一样的才写回并计数,最后弹窗报告"共清理了多少格"。 看 A 列," 张三 "变成了"张三"、"zhangsan"变成了"ZHANGSAN",干干净净。 这次改了多少格,弹窗里写得清清楚楚,方便你记一笔审计/对账。
关键经验(来自网络实战总结):
组合清理就一行行来: 新值 = Trim(原值)先去空格,紧接新值 = UCase(新值)再转大写,两步串起来就是"去空格 + 转大写";想只转小写就把UCase换成LCase。只动"真的变了"的格: If 新值 <> 原值 Then ... 改数 = 改数 + 1保证只有内容确实不同的单元格才写回并计数,原样本来就对的直接跳过,统计数字才准。末行用 End(xlUp)动态找,表加行减行都不用改代码;保存工作簿一定要存成.xlsm格式,否则宏会丢失。清理会改原数据,动手前先备份。
知识点小结
用 VBA 清理文本,本质就是把"手动去空格、改大小写"这件事,翻译成一段固定动作:用 Trim 去首尾空格 → 用 UCase 转大写 / LCase 转小写 → 把结果写回单元格 → 弹窗报告。三句话记牢就够用:
去空格靠 Trim→Trim(文本)去掉文本**首尾(前后)**的空格,单词中间的空格不动;它不算进原内容,必须单元格.Value = Trim(单元格.Value)写回去才生效;改大小写靠 UCase/LCase→UCase("apple")得"APPLE"、LCase("APPLE")得"apple",同样要写回才生效,是数据标准化(让 VLOOKUP 对得上、统计不漏人)的关键;不乱靠 If→If 新值 <> 原值只处理真正变化了的格、顺便计数,清理既干净又有据可查。
它和前面学的「提取指定内容」「按分隔符拆分」「加前后缀」「合并多列」「查找替换」是一套组合拳:提取管"从长文本里揪出想要的段"、拆分管"把挤在一格的几样归回各列"、前后缀管"给现成内容统一穿马甲"、合并管"把分散的列拼成完整一列"、替换管"把写错/不统一的词扶正"、清理管"把看不见的空格和乱大小本收拾干净"——从收数、清数、拼装到精准提取,全程不用手动点一下。
下一篇预告:把"看得见的前后空格、乱大小写"收拾干净之后,还有一类更阴险的脏数据——看不见的换行符和制表符。从网页或别的系统粘来的内容,常夹着换行(vbCrLf)和制表符(vbTab),表面看着正常,一 VLOOKUP 就错、一导入系统就报。下一篇我们继续从网络上抓取新的 VBA 实用技巧,带你解锁「一键批量删除文本里的换行符和特殊符号(用 Replace 配合 vbCrLf、vbTab)」——让复制到系统的数据不再莫名报错。
【往期 VBA 精选】
系列已更新 60+ 篇,挑几篇最实用的继续看:
从0学 Excel VBA 第1篇:认识 VBA,什么是宏?[1] 进销存实战第1篇:系统设计与初始化[2] CRM 客户管理第1篇:系统设计与初始化[3] Excel 一键系列:一键批量给内容加固定前缀或后缀[4] 界面自定义第1篇:自定义菜单与工具栏[5]
关注公众号「西哥的AI幻觉」,对话框发送「VBA」可获取完整目录与配套源码。
【西哥能帮你做什么】
办公自动化 · AI 视频生产 · AI 编程助手落地 · 工厂数字化
把 Excel / VBA / Python 里那些重复到吐的活,一次性自动化掉 批量产出「古诗每日一诵」式 AI 古诗词视频(配音 + 配图 + 合成一键完成) OpenClaw / WorkBuddy 等 AI 编程助手的企业内训与落地陪跑 从 PLC 到 MES 的工厂务实数字化方案
【找到我】
公众号「西哥的AI幻觉」:点文章右上角「···」设为星标,更新不迷路 加微信:LekonWang(备注「VBA」进学习交流群)
本文由西哥原创,转载请注明出处「西哥的AI幻觉」。















































































