如何使用Excel公式仅删除前导和尾随空格,同时在单词之间保留空格?

问题描述 投票:0回答:5

在 Excel 中,

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

是否有一个公式或其组合可以实现与

TRIM()
相同的作用,但在单词之间保留空格?

在下面的示例中,我正在寻找一个可以实现虚构公式“WXYZ”的公式:

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

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

请注意,我在某处读到,VBA 中的

TRIM()
的工作方式与上面的 WXYZ 类似。但是,我正在寻找公式解决方案。

excel string excel-formula whitespace
5个回答
5
投票

我相信这应该可行(假设你的字符串位于 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)
返回字符串中最后一个非空格字符的位置 从右到左


2
投票

这在 Excel 365 中会是什么样子?我认为使用 let、sequence 和 xmatch 会更容易一些,但不是特别短:

=IFERROR(LET(seq,SEQUENCE(LEN(A2)),
array,MID(A2,seq,1),
start,XMATCH(TRUE,array<>" "),
finish,XMATCH(TRUE,array<>" ",0,-1),
MID(A2,start,finish-start+1)),"")


0
投票

只是为了添加所有有价值的内容:

B1
中的公式:

=LET(x,TEXTSPLIT(A2," ",,1),TEXTJOIN(DROP(DROP(TEXTSPLIT(" "&A2&" ",x),,1),,-1),,x))

0
投票

也可以使用公式数组。

假设字符串位于

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]
同时输入,如果输入正确,您将在公式周围看到
{
}

关于@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))

0
投票

我尝试了@JvdV 发布的答案。它从中间有空格的值中删除了前导空格和尾随空格,并保留了所有中间空格(这很棒)。

但是,对于中间没有空格的值,公式会返回错误。所以,我添加了它。我从 @JvdV 获取公式并将其放入 IF() 中,以测试是否存在中间空格。如果有中间空格,则运行公式,如果没有,则仅运行 TRIM()。

=IF(ISNUMBER(FIND(" ",TRIM(A2))), LET(x,TEXTSPLIT(A2," ",,1),TEXTJOIN(DROP(DROP(TEXTSPLIT(" "&A2&" ",x),,1),,-1),,x)), TRIM(A2))
© www.soinside.com 2019 - 2024. All rights reserved.