VBA按空格拆分string

我想要一个可以调用并传入单元格的excel函数。 input:

Firstname Lastname email@mail.com Firstname midname Lastname email@mail.com 

中间的空格是随机的。 输出应该只是一个数组。 数组可以有任何长度,因为我不知道string是什么样的。 输出应该是:

 Firstname, Lastname, email@mail.com Firstname, midname, Lastname, email@mail.com 

我将从一个单元格中调用该函数,如=MySplitFunction(A1) ,并且应该将A1中的Firstname,B1中的Firstname和C1中的email@mail.com。 我创build了一个新模块并尝试了下面的代码:

 Function MySplitFunction(s As String) As String() MySplitFunction = Split(s, " ") End Function 

这给了我输出

 Firstname 

我如何得到它返回整个数组? 甚至有可能在一个单元格中写入一个函数,这个函数会把东西放在靠近它的单元格中?

编辑:

在这里输入图像说明

  • 在A1中input你input的数据
  • selectB1:D1范围
  • input你的公式=MySplitFunction(A1)
  • 通过按CTRL + SHIFT + ENTER而不是只是ENTER使其成为数组公式。

要删除多个空格,你可以像这样修改你的代码(不是超高效的,但工作):

 Function MySplitFunction(s As String) As String() Dim temp As String Do temp = s s = Replace(s, " ", " ") 'remove multiple white spaces Loop Until temp = s MySplitFunction = Split(Trim(s), " ") 'trim to remove starting/trailing space End Function 

替代解决scheme是:

  1. 使用RegEx作为删除所有空格的第一步
  2. 根据剩下的单个空格拆分第一步的结果
  3. 而且,因为你需要在不同的单元格中返回不同的文本元素而不是附加的函数参数才能解决这个问题。

这是build议的function:

 Public Function MySplitFunction(sMark As String, nTh As Integer) As String On Error GoTo EH 'regexp declaration Dim objRegExp As Object Set objRegExp = CreateObject("vbscript.regexp") Dim tmpTXT As String Dim tmpArr As Variant With objRegExp .Global = True .Pattern = "\s+" tmpTXT = .Replace(sMark, " ") End With tmpArr = Split(tmpTXT, " ") MySplitFunction = tmpArr(nTh - 1) Exit Function EH: MySplitFunction = "" End Function 

这是屏幕截图展示它如何工作:

在这里输入图像说明

重要! 当在Excel中调用函数时,使用逗号来分隔参数(而不是由于我使用的本地国家版本的Excel而提供的分号)。