在Excel公式中模拟字符串拆分功能

时间:2009-06-23 08:21:37

标签: excel formula excel-formula

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

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

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

8 个答案:

答案 0 :(得分:23)

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

=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 功能是 用于返回之后的任何文本 第一空间

答案 1 :(得分:9)

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

=LEFT(A1, SEARCH(" ",A1,1))

答案 2 :(得分:9)

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

答案 3 :(得分:3)

如果你一次把它们写成一个单元格,这些东西往往会更简单,将冗长的公式分解成更小的公式,在那里你可以检查它们。然后,您可以隐藏中间计算,或将它们全部滚动到单个公式中。

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

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

如果你愿意的话。

答案 4 :(得分:2)

如果您只需要在MS Excel中的“文本到列”功能的答案后需要分配列。

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

HTH

答案 5 :(得分:1)

突出显示单元格,使用Dat =>列到文本和DELIMITER是空格。 结果将显示在与拆分找到空格的列数相同的列中。

答案 6 :(得分:1)

在其他答案中有一些很棒的工作表 - 但我认为他们忽略了你可以定义用户定义的函数(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","/")

答案 7 :(得分:1)

AFAIK最好的模拟Split()的方法是使用FILTERXML,该版本可从Excel 2013开始使用(不适用于Excel Online或Mac)。

语法或多或少总是:

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

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