如何只删除前导空格和尾随空格,同时在单词之间留出空格和excel公式?

时间:2016-11-17 13:34:25

标签: string excel-formula whitespace

在excel中,TRIM()将删除文本前后的所有空格,同时还删除单词之间的任何重复空格。

是否有一个公式或其组合与TRIM()相同但在字之间保留空格?

在下面的例子中,我正在寻找能够实现虚构公式的公式" WXYZ":

TRIM(" Omicron Persei 8 ") = "Omicron Persei 8"
WXYZ(" Omicron Persei 8 ") = "Omicron Persei 8"

请注意,我已经读过某个地方,VBA中的TRIM()将像上面的WXYZ一样工作。但是,我正在寻找配方解决方案。

2 个答案:

答案 0 :(得分:4)

我相信这应该有效(假设你的字符串位于A1):

=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)

FIND(LEFT(TRIM(A1),1),A1)返回字符串

中第一个非空格字符的位置

MATCH(RIGHT(TRIM(A1),1),INDEX(MID(A1,LEN(A1)-ROW(INDIRECT("1:"&LEN(A1)))+1,1),0),0)返回字符串中从右到左的最后一个非空格字符的位置。

答案 1 :(得分:1)

也可以使用公式数组。

假设字符串位于A1,请在B2中输入此公式数组。强烈建议确保公式ROW(B:B)的这一部分始终指向公式所在的同一列(在本例中为B列),这是为了避免公式返回错误,如果它所引用的列将被删除。

=MID($A1,
FIND(LEFT(TRIM($A1),1),$A1),
1+MAX(ROW(B:B)*(ROW(B:B)<=LEN($A1))*(MID($A1,ROW(B:B),1)<>" "))
-FIND(LEFT(TRIM($A1),1),$A1))

同时按 [Ctrl] + [Shift] + [Enter] 输入FormulaArrays,如果输入正确,您将在公式周围看到 { }

关于@Aakash提供的公式,我建议替换此部分中的INDIRECT函数:

-ROW(INDIRECT("1:"&LEN($A7)))

用这个:

-ROW(B:B)

因此公式将变为非易失性

=MID($A1,
FIND(LEFT(TRIM($A1),1),$A1),
(LEN($A1)-MATCH(RIGHT(TRIM($A1),1),INDEX(MID($A1,LEN($A1)-ROW(B:B)+1,1),0),0)
-FIND(LEFT(TRIM($A1),1),$A1)+2))