我正在尝试在 excel 公式中拆分字符串,就像我可以在许多编程语言中做的那样,例如
string words = "some text".split(' ');
问题是我不能确定单元格中有多个单词。如果我尝试使用FIND()
orSEARCH()
函数,#VALUE
如果没有空间,它们会返回。是否有任何简单的方法来拆分字符串以使其返回单个单词(或者更好,使其返回第一个单词或所有其他单词)?
我正在尝试在 excel 公式中拆分字符串,就像我可以在许多编程语言中做的那样,例如
string words = "some text".split(' ');
问题是我不能确定单元格中有多个单词。如果我尝试使用FIND()
orSEARCH()
函数,#VALUE
如果没有空间,它们会返回。是否有任何简单的方法来拆分字符串以使其返回单个单词(或者更好,使其返回第一个单词或所有其他单词)?
返回第一个单词或所有其他单词的公式。
=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
对公式的评论:
当用空格分隔时,以下返回单元格 A1 中的第一个单词(适用于 Excel 2003):
=LEFT(A1, SEARCH(" ",A1,1))
=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))
如果您一次编写一个单元格,这些事情往往会更简单,将冗长的公式分解成更小的公式,您可以在其中一路检查它们。然后,您可以隐藏中间计算,或将它们全部汇总到一个公式中。
例如,采用詹姆斯的公式:
=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))
如果你愿意的话。
其他答案中有一些很棒的工作表,但我认为他们忽略了您可以定义用户定义的函数(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","/")
突出显示单元格,使用 Dat => Text to Columns,DELIMITER 是空格。结果将出现在与拆分找到空间一样多的列中。
AFAIK 最好的模拟Split()
方法是使用FILTERXML
Excel 2013 及更高版本(不是 Excel Online 或 Mac)。
语法或多或少总是:
=FILTERXML("<t><s>"&SUBSTITUTE(A1,"|","</s><s>")&"</s></t>","//s")
这将返回一个数组以在其他函数中使用,如果没有找到分隔符,甚至会保留。如果您想了解更多关于它的信息,也许您对这篇文章感兴趣。