VBA按空格分割字符串

Goa*_*cat 9 string excel vba split

我想要一个excel函数,我可以调用并传递一个单元格.输入:

Firstname          Lastname      email@mail.com       
Firstname      midname     Lastname      email@mail.com
Run Code Online (Sandbox Code Playgroud)

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

Firstname, Lastname, email@mail.com       
Firstname, midname, Lastname, email@mail.com
Run Code Online (Sandbox Code Playgroud)

我将从一个单元格中调用该函数=MySplitFunction(A1),这应该将Firstname放在A1中,Lastname放在B1中,将email@mail.com放在C1中.我创建了一个新模块并尝试了以下代码:

Function MySplitFunction(s As String) As String()
    MySplitFunction = Split(s, " ")
End Function
Run Code Online (Sandbox Code Playgroud)

这给了我输出

Firstname
Run Code Online (Sandbox Code Playgroud)

我如何让它返回整个阵列?甚至可以在一个单元格中编写一个函数,将函数放在靠近它的单元格中?

编辑:

在此输入图像描述

ass*_*ias 12

  • 在A1中输入数据
  • 选择B1:D1范围
  • 输入你的公式 =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
Run Code Online (Sandbox Code Playgroud)


Kaz*_*wor 5

替代解决方案是:

  1. 使用RegEx作为删除所有空格的第一步
  2. 基于左侧的单个空格分割步骤的结果
  3. 而且,因为你需要在不同的单元格中返回文本的不同元素,否则附加的函数参数将解决这个问题.

这是建议的功能:

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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

重要!当在Excel中调用函数时,使用逗号分隔参数(而不是由于我使用的本地版本的excel而呈现的分号).

  • 正则表达式+1好主意.在模式中添加`CHAR(160)`组件也是个好主意. (2认同)