在Excel上删除前导或尾随空格,但不要删除文本或单词之间的空格

时间:2019-01-30 09:11:03

标签: excel

如何删除实际字符串前后的一个或多个空格。字符串之间的空格必须留在原处。空格数(前导/尾随/中间)有所不同。

示例:

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

结果应为:

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

3 个答案:

答案 0 :(得分:2)

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

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)

要输入/确认数组公式,请在按下 enter 的同时按住 ctrl + shift 。如果正确执行此操作,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)

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

编辑

如果您使用FILTERXML函数的较新版本的Excel,可以尝试:

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

答案 1 :(得分:0)

VBA应该是最简单的,如果您想要公式,请尝试

enter image description here

  

= MID(A1,FIND(LEFT(TRIM(A1),1),A1),(LEN(A1)-MATCH(RIGHT(TRIM(A1),1),INDEX(MID(A1,LEN(A1) )-ROW(INDIRECT(“ 1:”&LEN(A1)))+ 1,1),0),0)-FIND(LEFT(TRIM(A1),1),A1)+2))

答案 2 :(得分:0)

如果要删除适当的前导/后缀空格,请选择要更改的值的列,然后运行此子过程。

Sub removeLeadingTrailingSpaces()

    With Selection
        .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
                       FieldInfo:=Array(0, 2)
    End With

End Sub