查找字符串中的最后一个空

时间:2014-04-30 16:57:13

标签: vba

我想找到字符串中的最后一个空格。这样做的目的是将名称分成三个部分。我可以很容易地得到名字,但最后两个并不那么简单。

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])

提前致谢!

3 个答案:

答案 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, " ")