我想找到字符串中的最后一个空格。这样做的目的是将名称分成三个部分。我可以很容易地得到名字,但最后两个并不那么简单。
fullName = "Giger,San Paulo Fisher"
first = Left(fullName, InStr(1, ",", fullName, vbTextCompare))
last = Mid(fullName,InStr(1, ",", fullName, vbTextCompare),[POSITION OF LAST SPACE]-InStr(1, ",", fullName, vbTextCompare))
middle = Right(fullName,Len(fullName)-[POSITION OF LAST SPACE])
提前致谢!
答案 0 :(得分:1)
有一个相当着名的技巧(参见例如Excel: last character/string match in a string - 我从那里接受的那个版本的最后一个版本调整了我的答案):你用一个空格替换一个空格,然后取最后一个N个字符并修剪它们:
=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99))
您可以根据需要设置数字(在这种情况下为99) - 比您设想的最长的单词长。
以下是它的工作原理。想象一下您的原始字符串(名称):
Giger,San Paulo Fisher
现在用8个空格替换每个空格(保持可管理性 - 公式使用99,原理相同):
Giger,San Paulo Fisher
现在取最后8个字符:
__Fisher
(我使用下划线来显示空格)
现在修剪它(删除前导和尾随空格):
Fisher
这是你追求的结果。
您也可以使用其他字符串 - 但由于您想要拆分空格,因此它是最自然的字符串。
如果要在VBA中执行此操作,可以使用
lastSpace = InStrRev(fullName, " ")
lastName = Mid(fullName, lastSpace + 1)
顺便说一句 - 小心假设最后一个空格之后的东西是整个姓氏。有许多名称(在某些国家/地区比其他国家/地区更多)由多个以空格分隔的单词组成。
答案 1 :(得分:1)
您可以使用不带VBA的分割功能。这将使你和#34; Giger,San",#34; Paulo","和#34; Fisher"。通过查找逗号来分割姓氏和名字应该相对容易。而且你不必担心包括多少名字或它们有多长。
Dim tStr As String
tStr = "Giger,San Paulo Fisher"
Dim tArray() As String
tArray = Split(tStr, " ")
For i = 0 To UBound(tArray)
MsgBox tArray(i)
Next I
如果您只想要最后一个空格的索引。其中任何一个都可以。请注意,第二个是使用上面的代码从Split函数中找到字符串数组。
MsgBox InStrRev(tStr, " ")
MsgBox InStr(1, tStr, tArray(UBound(tArray))) - 1
答案 2 :(得分:0)
它只是你可以使用split命令来使用空格分隔名称
例如:xyz = Split(tStr, " ")