如何清除Excel中Oracle ERP导出BOM物料编码首尾的隐藏问号?
处理Oracle ERP导出BOM物料编码首尾隐藏问号的解决方案
我之前也遇到过几乎一模一样的问题,Oracle ERP导出的BOM报表里物料编码总被首尾隐藏字符干扰,折腾了好半天终于搞定,分享下我的思路和办法:
问题复盘
从Oracle ERP下载的物料清单(BOM)里,物料编码比如?11301-21?(粘贴后能看到首尾的问号),这些问号属于隐藏字符,用常规的Excel文本清理函数完全无效:
CLEAN:只能清除标准非打印字符,对这种显示为问号的特殊字符不起作用TRIM:仅处理首尾空格,碰不到这类特殊符号SUBSTITUTE:一开始不知道具体是哪个字符,盲目替换根本没效果
后来也是查了相关线程的VBA代码,才追踪到这些隐藏字符本质就是问号?,只是在Excel单元格里默认不显示而已。
有效解决办法
1. 公式批量处理(适合少量数据)
既然确定了是问号,直接用嵌套的SUBSTITUTE精准替换首尾的问号:
=SUBSTITUTE(SUBSTITUTE(A1,"?","",1),"?","",LEN(A1)-LEN(SUBSTITUTE(A1,"?","")))
- 第一个
SUBSTITUTE专门替换开头的第一个问号 - 第二个
SUBSTITUTE通过计算总问号数量,定位并替换结尾的最后一个问号
2. VBA批量清洗(适合大量数据)
如果要处理整列甚至整个工作表的物料编码,用VBA脚本效率更高:
Sub CleanBOMCodeHiddenChars() Dim targetRange As Range Dim cell As Range Set targetRange = Selection '先选中需要处理的单元格区域 For Each cell In targetRange If cell.Value <> "" Then ' 去除所有问号(如果中间有合法问号,就注释掉这行用下面的代码) cell.Value = Trim(Replace(cell.Value, "?", "")) ' 仅去除首尾问号(保留中间合法问号的话用这行) ' cell.Value = Left(Right(cell.Value, Len(cell.Value) - 1), Len(cell.Value) - 2) End If Next cell End Sub
使用方式:选中需要清理的区域,运行这个宏就能一次性搞定。
3. Power Query清洗(适合整列结构化数据)
如果习惯用Power Query做数据预处理,这也是个省心的办法:
- 选中物料编码列,点击「数据」选项卡→「从表格/区域」
- 在Power Query编辑器中添加自定义列,输入公式:
= Text.Trim(Text.Replace([物料编码], "?", ""))
- 关闭并上载处理后的数据到Excel即可
内容的提问来源于stack exchange,提问作者Umar Ahmad
相关产品推荐
相关产品推荐

