【问题标题】:VBA split string by spacesVBA用空格分割字符串
【发布时间】:2013-08-02 08:04:52
【问题描述】:

我想要一个 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

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

编辑:

【问题讨论】:

    标签: string excel vba split


    【解决方案1】:
    • 在 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
    

    【讨论】:

    • 这有点用,但是我并没有摆脱所有额外的空白。有什么想法吗?
    • 我想我想做一些事情,用一个空格替换所有多个空格,然后在其上运行 Split(s, " ")。想法?
    • 我确实让它工作了,但我必须在当前替换行下方添加´s = Replace(s, Chr(160), " ")´,因为它包含所谓的“非打破空间”。我编辑了答案以包含此内容。非常感谢您的帮助!
    【解决方案2】:

    替代解决方案是:

    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,而不是使用分号)。

    【讨论】:

    • 我输入的公式与您在 B2 中所做的完全一样,但出现错误“您无法更改数组的一部分。”
    • 我在答案末尾的最后一句话中提到的逗号与分号怎么样?
    • 检查原始帖子的编辑。我认为我不应该使用逗号。我通常总是使用分号。
    • 你说得对,分号对你来说没问题。 1. 暂时评论On error... 行,并反馈代码中哪一行是错误。 2.回答您的附加问题(来自版本)-您可以改进此功能以使其成为数组功能,然后在 excel 中使用 Ctrl+Shift+Enter 调用它。
    • +1 正则表达式的好主意。在模式中添加一个CHAR(160) 组件也是一个好主意。
    猜你喜欢
    • 2012-09-22
    • 2014-12-13
    • 2023-04-02
    • 2013-10-11
    • 1970-01-01
    • 2012-04-22
    • 2020-05-16
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多