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

Vba 查找字符串中的最后一个空格,vba,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 = "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])

提前谢谢

这方面有一个相当著名的技巧(例如,请参阅-我根据此处接受的答案的上一个版本改编了我的答案):用大量空格替换一个空格,然后使用最后的N个字符并修剪它们:

=TRIM(RIGHT(SUBSTITUTE(A1," ",REPT(" ",99)),99))
您可以根据需要将数字(本例中为99)设置为任意大,比您设想的最长单词还要长

下面是它的工作原理。想象您的原始字符串(名称):

现在将每个空格替换为8个空格(保持可管理性-公式使用99,原理相同):

现在以最后8个字符为例:

__Fisher
(我用下划线表示空格)

现在修剪它(删除前导空格和尾随空格):

这就是你想要的结果

您也可以使用其他字符串,但由于您希望在空间上拆分,因此它是最自然的字符串

如果要在VBA中执行此操作,可以使用

lastSpace = InStrRev(fullName, " ")
lastName = Mid(fullName, lastSpace + 1)

顺便说一句——小心不要假设最后一个空格后面的东西就是整个姓氏。有许多名称(某些国家的名称多于其他国家的名称)由多个用空格分隔的单词组成。

您可以在不使用VBA的情况下使用拆分功能。这将得到“Giger,San”,“Paulo”和“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

您只需使用split命令,就可以使用空格分隔名称


例如:
xyz=Split(tStr,”

查看使用
InstrRev()
(最后一次出现)或
Split()
可能是一种更有用的总体方法。+1-这是一种很好的方法,即使它没有回答“问题”(“我想找到最后一个空格”),但它解决了根本问题。同意它没有回答“问题”。添加了一些关于如何查找“字符串中的最后一个空格”的信息。与您的非常相似。
lastSpace = InStrRev(fullName, " ")
lastName = Mid(fullName, lastSpace + 1)
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
MsgBox InStrRev(tStr, " ")
MsgBox InStr(1, tStr, tArray(UBound(tArray))) - 1