你好,我是小必,感谢与你在这里相遇。
我的第299篇原创Excel文章
今日内容:Excel工作表中打打印字符或空格。
今天有位小伙伴问了一个关于工作表单元格中的空格与非打印字符。但是常规的替换,使用TRIM函数与CALEN常规函数是无法删除。
如图所示,是待清除的字符串的内容。每个姓名的前面或者末尾都有一个空格或者非打印字符。
对于上面的字符串的长度使用LEN函数测一下,看看与实际的长度对比:
先使用常规的TRIM与CLEAN函数进行清理,看看结果:
然后再测试一下结果的长度与未清理前的长度:
从上面的结果来看,前三行都没有清理干净。
然后使用了复制粘贴到替换功能中也未能清理完成。
那么到底是怎么回事呢,主要问题出在CLEAN函数上。
有时文本值包含前导空格、尾随空格或多个嵌入空格字符(Unicode 字符集值 32 和 160),或非打印字符(Unicode 字符集值 0 到 31、127、129、141、143、144 和 157)。 执行排序、筛选或搜索操作时,这些字符有时会导致意外结果。
CLEAN函数只能清除非打印字符(unicode字符集值在0到31位)。即从文本中删除 7 位 ASCII 代码中的前 32 个非打印字符(值 0 到 31)。
TRIM函数从文本中删除 7 位 ASCII 空格字符(值 32)。
那么对于Unicode的值 为127、129、141、143、144 和 157的无法清除,同样地TRIM函数也无法清除Unicode值为160的字符。
那么要查看字符串中的Unicode值可以使用Excel中的Unicode函数与Unichar函数来相互转换。如将上述案例中的A2单元格中的姓名的最后一字符的值为:
发现上面的字符的值为160。
既然不能使用TRIM函数与CLEAN函数来清理,那么转换一下思路,可以使用替代的方法,即使用SUBSTITUTE函数进行间接地清理。
在清理的过程中需要先将160的值转换成对应的非打印字符,可以使用公式:
=UNICHAR(160)
那么先清理对应的TRIM与CLEAN无法清理的,然后剩下的交给这两个函数。根据这个思路,来解决上面的问题。
在B2单元格中输入以下公式:
=CLEAN(TRIM(SUBSTITUTE(A2,UNICHAR(160),"")))
同样地,如果是其他的大于32位以上的空格或者非打印字符,先测出其值是多少,再转换回来,最后替换掉即可。