在Excel公式中模拟string拆分function
我试图在excel公式中分割一个string,就像我可以在许多编程语言中做的那样,例如
string words = "some text".split(' ');
问题是,我不能确定单元格中有多个单词。 如果我尝试使用FIND()
或SEARCH()
函数,如果没有空格,则返回#VALUE
。 有没有简单的方法来分割string,以便它返回单个单词(或者甚至更好,以便返回第一个单词或所有其他单词)?
返回第一个单词或所有其他单词的公式。
=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
对公式的评论:
- TRIMfunction用于删除所有前导和尾随空格。 文本中的重复间距也被删除。
- FINDfunction然后find第一个空间
- 如果没有空格,则返回修剪后的文本
- 否则, MID函数用于在第一个空格之后返回任何文本
=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))
下面以空格分隔的单元格A1(在Excel 2003中工作)返回第一个单词:
=LEFT(A1, SEARCH(" ",A1,1))
如果你一次把它们写成一个单元格,这些事情就会变得更简单,把冗长的公式分解成更小的公式,在那里你可以检查它们。 然后,您可以隐藏中间计算,或将它们全部转换为单个公式。
比如,拿詹姆斯的公式:
=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))
如果你这么渴望的话。
如果您只需要分配到列的答案是MS Excel中的“文本到列”function。
请参阅MS帮助文章: http : //support.microsoft.com/kb/214261
HTH
突出显示单元格,使用Dat => Text to Columns,DELIMITER是空格。 结果将出现在分割查找空间的列中。
一些伟大的工作表福在其他答案,但我认为他们忽略了,你可以定义一个用户定义的函数(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","/")