Table of contents
在这篇文章中,你将学习如何从一个文本字符串中删除特定的字符,并一次从多个单元格中删除不需要的字符。
当从其他地方向Excel导入数据时,大量的特殊字符可能会进入你的工作表。 更令人沮丧的是,有些字符是不可见的,这就在文本字符串之前、之后或内部产生了额外的白色空间。 本教程为所有这些问题提供了解决方案,使你不必逐个单元格查看数据并清除不需要的内容。用手写的字符。
删除Excel单元格中的特殊字符
要从一个单元格中删除一个特定的字符,通过使用SUBSTITUTE函数的最简单形式将其替换为一个空字符串。
替换(SBSTITUTE) 电池 , 炭 , "")例如,为了消除A2中的一个问号,B2中的公式是:。
=substitute(a2, "?", "")
要删除键盘上没有的字符,可以从原单元格复制/粘贴到公式中。
例如,这里你可以摆脱一个倒置的问号。
=substitute(a2, "¿", "")
但如果一个不需要的字符是 隐形的 简单地说,通过CODE函数找到它的代码号。
在我们的案例中,不需要的字符("¿")在A2单元格中排在最后,所以我们使用CODE和RIGHT函数的组合来检索其独特的代码值,即191。
=code(right(a2))
一旦你得到了字符的代码,将相应的CHAR函数服务于上面的通用公式。 对于我们的数据集,公式如下。
=substitute(a2, char(191),"" )
注意:SUBSTITUTE函数是 区分大小写 如果你不想要的字符是一个字母,请记住这一点。
删除字符串中的多个字符
在以前的一篇文章中,我们研究了如何通过将几个SUBSTITUTE函数嵌套在一起,从Excel的字符串中删除特定的字符。 同样的方法可以用来一次性消除两个或多个不需要的字符。
替换(替换(替换)) 电池 , 符号1 , ""), 符号2 , ""), 符号3 , "")例如,要从A2的文本字符串中消除正常的感叹号和问号以及倒置的感叹号,请使用这个公式。
=substitute(substitute(substitute(a2, "!", ""), "¡", ""), "?
同样可以借助CHAR函数,其中161是 "¡"的字符编码,191是 "¿"的字符编码。
=substitute(substitute(a3, "!", ""), "?", ""), char(161), "") , char(191), "")
嵌套的SUBSTITUTE函数对于合理数量的字符可以正常工作,但如果你有几十个字符要删除,公式就会变得太长,难以管理。 下一个例子展示了一个更紧凑和优雅的解决方案。
一次性删除所有不需要的字符
该解决方案仅适用于Excel for Microsoft 365
你可能知道,Excel 365有一个特殊的函数,可以让你创建自己的函数,包括那些递归计算的函数。 这个新函数名为LAMBDA,你可以在上面链接的教程中找到关于它的全部细节。 下面,我将用几个实际的例子来说明这个概念。
一个自定义的LAMBDA函数来 删除不需要的字符 详见下文。
=LAMBDA(string, chars, IF(chars"", RemoveChars(SUBSTITUTE(string, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1), string)
为了能够在你的工作表中使用这个函数,你需要先为它命名。 为此,按Ctrl + F3打开 名字经理 ,然后定义一个 新名称 以这种方式。
- 在 命名 框,输入函数的名称。 移除字符 .
- 将范围设置为 工作手册 .
- 在 指的是 框,粘贴上述公式。
- 可选地,输入参数的描述,在 评论 当你在单元格中输入公式时,这些参数将被显示出来。
- 点击 认可 来保存你的新功能。
详细说明请见如何命名一个自定义LAMBDA函数。
一旦函数得到一个名字,你就可以像任何本地公式一样引用它。
从用户的角度来看,我们的自定义函数的语法就像这样简单。
RemoveChars(string, chars)在哪里?
- 字符串 - 是原始字符串,或者是对包含该字符串的单元格/区域的引用。
- 字母 - 可以用一个文本字符串或一个单元格引用来表示,以删除的字符。
为方便起见,我们在某个单元格(如D2)中输入不需要的字符。 要从A2中删除这些字符,公式为:。
=RemoveChars(A2, $D$2)
为了使该公式能够正确工作,请注意以下事项。
- 在D2中,列出的字符没有空格,除非你也希望消除空格。
- 包含特殊字符的单元格的地址被$符号锁定($D$2),以防止将公式复制到下面的单元格时,引用发生变化。
然后,我们简单地把公式拖下来,让D2中列出的所有字符从A2到A6单元格中删除。
要用一个公式清理多个单元格,请为第一个参数提供A2:A6范围。
=RemoveChars(A2:A6, D2)
由于公式只在最上面的单元格中输入,你不需要担心锁定单元格坐标--在这种情况下,相对引用(D2)就可以了。 而且由于支持动态数组,公式会自动溢出到所有被引用的单元格。
删除一个预定义的字符集
要从多个单元格中删除预定义的字符集,你可以创建另一个LAMBDA,调用主的 移除字符 例如,在第2个参数中指定不希望出现的字符。
要删除 特殊字符 ,我们已经创建了一个自定义函数,名为 移除特殊字符(RemoveSpecialChars :
=LAMBDA(string, RemoveChars(string, "?¿!¡*%#@^"))
拟 删除数字 我们又创建了一个函数,名为 删除数字 :
=LAMBDA(string, RemoveChars(string, "0123456789"))
上述两个函数使用起来都超级简单,因为它们只需要一个参数--原始字符串。
为了消除 特殊字符 从A2开始,公式为:。
=RemoveSpecialChars(A2)
只删除 数字字符。
=RemoveNumbers(A2)
这个功能如何工作。
从本质上讲, 移除字符 函数循环浏览了 字符串 每次递归调用之前,IF函数都会检查剩余的字符。 如果是 字符串 一旦最后一个字符被处理完毕,该公式就会返回 绳子 它目前的形式和出口。
关于详细的公式分解,请参见递归LAMBDA删除不需要的字符。
用VBA删除特殊字符
这些函数可以在所有版本的Excel中使用
如果你的Excel中没有LAMBDA函数,没有什么能阻止你用VBA创建一个类似的函数。 一个用户定义的函数(UDF)可以用两种方式编写。
删除特殊字符的自定义功能 递归 :
这段代码模拟了上面讨论的LAMBDA函数的逻辑。
Function RemoveUnwantedChars(str As String , chars As String ) If ( " " chars ) Then str = Replace(str, Left(chars, 1), "" ) chars = Right(chars, Len(chars) - 1) RemoveUnwantedChars = RemoveUnwantedChars(str, chars) Else RemoveUnwantedChars = str End If End Function删除特殊字符的自定义功能 非递归 :
在这里,我们从1到Len(chars)循环查看不需要的字符,并将原始字符串中发现的字符替换为空字符。 MID函数将不需要的字符一个一个地拉出来,并将它们传递给Replace函数。
Function RemoveUnwantedChars(str As String , chars As String ) For index = 1 To Len(chars) str = Replace(str, Mid(chars, index, 1), " " ) Next RemoveUnwantedChars = str End Function按照《如何在Excel中插入VBA代码》中的解释,在你的工作簿中插入上述代码之一,你的自定义函数就可以使用了。
为了不混淆我们的新用户定义的函数和Lambda定义的函数,我们给它起了不同的名字。
RemoveUnwantedChars(string, chars)假设原始字符串在A2中,不受欢迎的字符在D2中,我们可以用这个公式把它们去掉。
= RemoveUnwantedChars(A2, $D$2)
带有硬编码字符的自定义函数
如果你不想为每个公式提供特殊字符而烦恼,你可以直接在代码中指定它们。
Function RemoveSpecialChars(str As String ) As String Dim chars As String Dim index As Long chars = "?¿!¡*%#$(){}[]^&/\~+-" For index = 1 To Len(chars) str = Replace(str, Mid(chars, index, 1), " " ) Next RemoveSpecialChars = str End Function请记住,上述代码是用于演示的。 在实际使用中,请确保在下面一行中包括所有你想删除的字符。
chars = "?¿! ¡*%#$(){}[]^&/~+-"
这个自定义函数被命名为 移除特殊字符(RemoveSpecialChars 而且它只需要一个参数--原始字符串。
RemoveSpecialChars(string)为了从我们的数据集中剥离特殊字符,公式为:。
=RemoveSpecialChars(A2)
删除Excel中的不可打印字符
Microsoft Excel有一个特殊的功能来删除非打印字符--CLEAN功能。 从技术上讲,它剥离了7位ASCII集(代码0到31)中的前32个字符。
例如,要删除 不可打印的字符 从A2开始,这里是要使用的公式。
=CLEAN(A2)
这将消除非打印字符,但文本之前/之后和单词之间的空格将保留。
为了摆脱 额外空间 ,将CLEAN公式包裹在TRIM函数中。
=trim(clean(a2))
现在,所有前面和后面的空格都被删除,而中间的空格则减少为一个空格字符。
如果你想绝对删除 所有空间 在一个字符串内,然后另外用一个空字符串代替空格字符(代码为32)。
=trim(清洁((替代(a2, char(32), "")))))
一些空格或其他不可见的字符仍然留在你的工作表中? 这意味着这些字符在Unicode字符集中具有不同的价值。
举例来说,一个人的字符代码 非断裂空间 ( )是160,你可以用这个公式清除它。
=substitute(a2, char(160)," ")
要擦除一个 特定非打印字符 详细说明和公式例子在这里:如何删除一个特定的非打印字符。
用Ultimate Suite删除特殊字符
支持Microsoft 365的Excel,Excel 2019 - 2010
在这最后一个例子中,让我告诉你在Excel中删除特殊字符的最简单方法。 在安装了终极套件后,你需要这样做。
- 关于 阿博比特数据 选项卡,在 文本 组,点击 移除 > 移除字符 .
一会儿,你就会得到一个完美的结果。
如果出了问题,不用担心--你的工作表的备份将被自动创建,因为 备份本工作表 框是默认选择的。
想试试我们的移除工具吗? 下面有一个评估版的链接。 谢谢你的阅读,希望下周在我们的博客上见到你。
可用的下载
删除特殊字符 - 示例(.xlsm文件)
终极套房 - 试用版 (.exe文件)