首页 > 解决方案 > 删除前导或尾随空格,但不删除 Excel 上文本或单词之间的空格

问题描述

如何删除实际字符串前后的一个或多个空格。字符串之间的空格必须保持原位。空格数(前导/尾随/之间)各不相同。

例子:

"1234   456abc    "
"  1234  456bac    "
"    1234 456cab    "

结果应该是:

"1234   456abc"
"1234  456bac"
"1234 456cab"

标签: excel

解决方案


如果要保留所有中间空间,最简单的方法是使用简短的用户定义函数。

Function vbaTRIM(S As String) As String
    vbaTRIM = Trim(S)
End Function

如果你不能使用 VBA,你可以使用这个相当复杂的数组函数:

=MID(A1,MATCH(TRUE,(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)<>CHAR(32)),0),
LOOKUP(2,1/(MID(A1&" ",ROW(INDIRECT("1:"&LEN(A1)+1)),1)<>CHAR(32)),
ROW(INDIRECT("1:"&LEN(A1)+1)))-MATCH(TRUE,(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)<>CHAR(32)),0)+1)

要输入/确认数组公式,请在按住ctrl+的shift同时按enter。如果您正确执行此操作,Excel 将{...}在公式栏中看到的公式周围放置大括号。

这个函数有两个主要部分:

查找第一个非空格

=MATCH(TRUE,(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)<>CHAR(32)),0)

查找最后一个非空格

=LOOKUP(2,1/(MID(A1&" ",ROW(INDIRECT("1:"&LEN(A1)+1)),1)<>CHAR(32)),ROW(INDIRECT("1:"&LEN(A1)+1)))

那么,只返回从开头和结尾剥离的空格:

=mid(a1,firstNonSpace,lastNonSpace-firstNonSpace+1)

如果您将公式的这些部分输入到某个单元格中,并使用公式评估工具,您应该能够弄清楚它们是如何工作的。

编辑

如果您有更新版本的 Excel,具有该FILTERXML功能,您可以尝试:

=FILTERXML("<s>" & A1 & "</s>", "//s")

推荐阅读