Excel单元格含字面量Unicode值( )与空格字符串对比咨询
解决Excel中含
 或Unicode空格的字符串对比问题 我来帮你搞定这个问题!你遇到的情况大概率是没搞清楚字符串里的 到底是字面量的HTML实体文本还是实际的Unicode非断空格字符,这两种情况的处理方式完全不同,我帮你拆分说明:
第一步:先搞清楚你的字符串里是什么内容
先判断到底是哪种情况:
- 如果选中单元格按F2编辑时,能直接看到
 这6个字符(&、#、1、6、0、;),那是字面量HTML实体; - 如果看起来就是空格,但和普通空格对比不相等,那是Unicode非断空格(U+00A0,对应ASCII码160),甚至可能是其他类似空格的特殊字符(比如全角空格U+3000)。
针对字面量 的替换方案
如果是字面量的HTML实体,你之前用Replace(textref, " ", " ")无效,大概率是没加全局替换参数,试试下面的VBA代码:
Dim textref As String textref = Range("A1").Value ' 假设目标内容在A1 ' 最后两个参数确保全局替换、不区分大小写(这里大小写不影响,但全局替换很关键) textref = Replace(textref, " ", " ", 1, -1, vbTextCompare) Range("A1").Value = textref ' 把替换后的值写回单元格
或者直接用Excel工作表函数(不用VBA):
=SUBSTITUTE(A1," "," ")
如果还是无效,检查下实体是否有拼写差异(比如有没有漏分号、是不是全角字符),可以用LEN函数看字符串长度,对比替换前后的长度变化来验证。
针对Unicode非断空格的替换方案
如果是看起来像空格但实际不是普通空格的字符,先确认它的编码:
在任意空白单元格输入公式,比如目标字符在A1的第2位:
=CODE(MID(A1,2,1))
- 如果返回
160,那就是U+00A0,用以下VBA代码替换:
textref = Replace(textref, ChrW(160), " ")
或者工作表函数:
=SUBSTITUTE(A1,CHAR(160)," ")
- 如果返回其他数字(比如
12288是全角空格),就用对应的ChrW(编码值)替换,比如ChrW(12288)。
关于“让Excel把文本渲染为空格”的问题
Excel本身不是HTML编辑器,不会自动把字面量的 渲染成空格,必须手动替换成普通空格才能和纯空格字符串对比。如果是Unicode非断空格,替换成普通空格后就会和正常空格完全一致了。
内容的提问来源于stack exchange,提问作者Chris




