10

我想要一个excel中的函数,我可以调用它并将一个单元格传递给它。输入:

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

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

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

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

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

这给了我输出

Firstname

我如何让它返回整个数组?是否有可能在一个单元格中编写一个函数,将东西放在靠近它的单元格中?

编辑:

在此处输入图像描述

4

2 回答 2

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
于 2013-08-01T11:57:53.767 回答
6

替代解决方案是:

  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

这是展示其工作原理的屏幕截图:

在此处输入图像描述

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

于 2013-08-01T12:39:54.520 回答