25

我正在尝试在 excel 公式中拆分字符串,就像我可以在许多编程语言中做的那样,例如

string words = "some text".split(' ');

问题是我不能确定单元格中有多个单词。如果我尝试使用FIND()orSEARCH()函数,#VALUE如果没有空间,它们会返回。是否有任何简单的方法来拆分字符串以使其返回单个单词(或者更好,使其返回第一个单词或所有其他单词)?

4

8 回答 8

24

返回第一个单词所有其他单词的公式。

=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))

示例和结果

Text                  Description                      Results

                      Blank 
                      Space 
some                  Text no space                some
some text             Text with space                  text
 some                 Text with leading space          some
some                  Text with trailing space         some
some text some text   Text with multiple spaces        text some text

对公式的评论:

  • TRIM函数用于删除所有前导和尾随空格。文本中的重复间距也被删除。
  • FIND函数然后找到第一个空格
  • 如果没有空格,则返回修剪后的文本
  • 否则,MID函数用于返回第一个空格之后的任何文本
于 2009-06-23T15:28:29.857 回答
10

当用空格分隔时,以下返回单元格 A1 中的第一个单词(适用于 Excel 2003):

=LEFT(A1, SEARCH(" ",A1,1))
于 2009-06-23T08:31:25.657 回答
10
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)

这将首先检查单元格是否包含空格,如果包含则返回该空格中的第一个值,否则返回单元格值。

编辑

只是添加到上面的公式中,如果单元格中没有值,它将返回 0。如果您要显示一条消息或告诉用户它是空的,您可以使用以下内容:

=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))
于 2009-06-23T08:43:35.540 回答
4

如果您一次编写一个单元格,这些事情往往会更简单,将冗长的公式分解成更小的公式,您可以在其中一路检查它们。然后,您可以隐藏中间计算,或将它们全部汇总到一个公式中。

例如,采用詹姆斯的公式:

=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)

仅在 Excel 2007 或更高版本中有效。

分解如下:

B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))

它只是更容易处理,一次一个块。完成后,你可以把它变成

=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))

如果你愿意的话。

于 2009-06-23T15:40:22.280 回答
3

其他答案中有一些很棒的工作表,但我认为他们忽略了您可以定义用户定义的函数(udf)并从工作表或公式中调用它。

您遇到的下一个问题是决定使用整个数组还是使用元素。

例如这个 UDF 功能代码

Public Function UdfSplit(ByVal sText As String, Optional ByVal sDelimiter As String = " ", Optional ByVal lIndex As Long = -1) As Variant
    Dim vSplit As Variant
    vSplit = VBA.Split(sText, sDelimiter)
    If lIndex > -1 Then
        UdfSplit = vSplit(lIndex)
    Else
        UdfSplit = vSplit
    End If
End Function

允许单个元素在一个单元格中包含以下内容

=UdfSplit("EUR/USD","/",0)

或者可以使用一组单元格

=UdfSplit("EUR/USD","/")

于 2017-06-27T22:47:40.710 回答
2

如果您仅在答案是 MS Excel 中的“文本到列”功能时才需要分配到列。

请参阅此处的 MS 帮助文章:http: //support.microsoft.com/kb/214261

高温高压

于 2014-09-12T10:41:07.580 回答
1

突出显示单元格,使用 Dat => Text to Columns,DELIMITER 是空格。结果将出现在与拆分找到空间一样多的列中。

于 2014-10-30T04:34:53.357 回答
1

AFAIK 最好的模拟Split()方法是使用FILTERXMLExcel 2013 及更高版本(不是 Excel Online 或 Mac)。

语法或多或少总是:

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

这将返回一个数组以在其他函数中使用,如果没有找到分隔符,甚至会保留。如果您想了解更多关于它的信息,也许您对这篇文章感兴趣。

于 2020-07-21T20:35:53.530 回答