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是:
- 使用RegEx作为删除所有空格的第一步
- 根据剩下的单个空格拆分第一步的结果
- 而且,因为你需要在不同的单元格中返回不同的文本元素而不是附加的函数参数才能解决这个问题。
这是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而提供的分号)。
- Excel VBA:如何提取string,如果我们知道string中的第一个和最后一个字母的位置
- 需要有关Excel和VBAstring处理和存储限制的信息以及build议的解决方法
- DAX / PowerPivot交叉连接types的查询传播到unsummarize / de-aggregate数据
- 基于多维数据集的Excel数据透视表 – 如何基于维度的两个成员来分割度量
- 在VBA中应该是一个简单的循环过程
- Excel:如何将答案存储在同一个单元格中? 我怎样才能完成var1 + var2 => Store:var2
- 试图用VBA代码编写(小数字)的权力
- 在合并单元格中Aspose excel wrapText
- 由上一个值过滤的累计不同计数 – DAX