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
=MySplitFunction(A1)
要删除多个空格,您可以像这样修改代码(不是超级高效但有效):
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)
替代解决方案是:
这是建议的功能:
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而呈现的分号).