我有一张Excel工作表,其中包含一个名称列,每个名称都以firstname capitalize和lastname大写。像JohnSmith一样
我想知道是否有一种方法可以让JohnSmith成为约翰史密斯。请帮忙
谢谢
答案 0 :(得分:1)
最好的答案是在Excel中使用宏。
Function AddSpaces(pValue As String) As String
Dim xOut As String
Dim iCounter As Integer
Dim xAsc As Variant
xOut = VBA.Left(pValue, 1)
For iCounter = 2 To VBA.Len(pValue)
xAsc = VBA.Asc(VBA.Mid(pValue, iCounter, 1))
If xAsc >= 65 And xAsc <= 90 Then
If VBA.Mid(pValue, iCounter - 1, 2) = "ID" Then
'StrComp(str1, str2, vbTextCompare)
xOut = xOut & VBA.Mid(pValue, iCounter, 1)
Else
xOut = xOut & " " & VBA.Mid(pValue, iCounter, 1)
End If
Else
xOut = xOut & VBA.Mid(pValue, iCounter, 1)
End If
Next
AddSpaces = xOut
End Function
最初不是我的代码,从其他地方复制,改变了一些变量来支持变量的显式声明。
答案 1 :(得分:0)
如前所述,您可以使用@Derrik链接的线程中列出的多个公式, 但我认为它们看起来都很长而且很麻烦。 我个人最喜欢的是:
=trim(REGEX.SUBSTITUTE(A1,"([A-Z])"," [1]"))
这需要Morefunc Addon(见下文,它还有许多其他有用的功能)
MOREFUNC ADDON
答案 2 :(得分:0)
从Derik的链接中,你可以使用这个数组公式(意味着你必须用ctrl + shift + enter确认它,而不是只输入):
=MIN(IF(ISERROR(FIND(CHAR(ROW(INDIRECT("65:90"))),C2,2)),"",FIND(CHAR(ROW(INDIRECT("65:90"))),C2,2)))
虽然我将其修改为从第二个角色开始。这将为您提供第一个首都的位置,忽略第一个角色。所以,如果C2是&#34; JohnSmith&#34;这将给你5,因为S在第5个位置,在单元格D2中。
现在您知道了姓氏的起始位置,您可以在E2中使用空格拼写全名:
=LEFT(C2,D2-1)&" "&RIGHT(C2,LEN(C2)-D2+1)
这取左边5-1 = 4个字符John,用空格连接,最后一个名字是9-5 + 1 = 5,因为9是整个名字的长度,即史密斯,所以你最终得到了约翰史密斯&#34;。