我在Mac OSX上使用的是Excel 2011。我有大约3000个条目的数据集。在包含名称的字段中,许多名称没有分开。名字和姓氏之间用空格隔开,但分开的名字被捆在一起。
这是我所拥有的(一个单元格):
格兰特·莫里森(Grant Morrison)肖利·费希(Bolly Oliver)本·奥利弗(Carlos Alberto Fernandez Urbano)本·奥利弗(Carlos Alberto Fernandez UrbanoBen Oliver)
这是我要完成的操作(一个单元格,逗号后用逗号隔开):
格兰特·莫里森(Grant Morrison),肖利·费斯(Sholly Fisch),本·奥利弗(Ben Oliver),卡洛斯·阿尔贝托(Carlos Alberto),费尔南德斯·厄巴诺(Fernandez Urbano),本·奥利弗(Carlos Alberto),费尔南德斯·厄巴诺(Fernandez Urbano),本·奥利弗(Ben Oliver),本·奥利弗
我发现了一些VBA脚本,可以用大写字母分割单词,但是我尝试过的脚本会在不需要这样的地方添加空格...
Function splitbycaps(inputstr As String) As String
Dim i As Long
Dim temp As String
If inputstr = vbNullString Then
splitbycaps = temp
Exit Function
Else
temp = inputstr
For i = 1 To Len(temp)
If Mid(temp, i, 1) = UCase(Mid(temp, i, 1)) Then
If i <> 1 Then
temp = Left(temp, i - 1) + " " + Right(temp, Len(temp) - i + 1)
i = i + 1
End If
End If
Next i
splitbycaps = temp
End If
End Function
我在这里发现了另一个使用RegEx的工具(原谅我,我只是在学习所有这些内容,所以听起来可能有些愚蠢),但是当我尝试使用它时,它根本不起作用,而且我的研究向我指出了一种添加对库的引用的方法,该方法将添加必要的工具,以便可以使用它。不幸的是,我一生无法找到如何在我的Mac版本的excel上添加对库的引用...我可能做错了,但这是我无法正常工作的答案。 。
Function SplitCaps(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "([a-z])([A-Z])"
SplitCaps = .Replace(strIn, "$1 $2")
End With
End Function
我基本上是崭新的,可以通过excel通过VBA添加自定义功能,甚至可能有更好的方法来执行此操作,但是似乎我得出的每个答案都不能完全正确地获得数据。感谢您的任何答案!
最佳答案
我来自Split Uppercase words in Excel的函数需要udpdd才能进行其他字符串匹配。
您可以在单元格B1
中将此功能用于A1
中的文本,如下所示
您的清洗所做的一个假设是人们只有两个名字,所以
本·奥利弗·卡洛斯·阿尔贝托
被打破
本奥利佛
卡洛斯·阿尔贝托(Carlos Alberto)
那实际上应该发生什么? (如果需要的话,请稍作调整)
码
Function SplitCaps(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "([a-z])([A-Z])"
SplitCaps = Replace(.Replace(strIn, "$1, $2"), "<br>", ", ")
End With
End Function