从单元格中提取最后一个子字符串

| 我在一栏中有名字。我只需要将该列中的姓氏拆分为另一列。 姓氏由右侧的空格分隔。 cell0ѭ单元格中的内容,我在cell1ѭ单元格中输入了公式(我需要在
B2
单元格中
\'Stevens\'
) 我尝试使用以下公式:
=RIGHT(A2,FIND(\" \",A2,1)-1)

=RIGHT(A2,FIND(\" \",A2))
这两个公式都适用于此单元格,但是当我填写下来/将其粘贴并粘贴到下面的单元格时,这将无效。我得到了错误的值!
A3 -> David Mckenzie

B3 -> Mckenzie
    
已邀请:
即使有中间名,此方法也有效:
=MID(A2,FIND(CHAR(1),SUBSTITUTE(A2,\" \",CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,\" \",\"\"))))+1,LEN(A2))
如果您想让所有内容都姓氏,请查看此答案。 如果您的名字中有尾随空格,则可以通过在上式中将所有
A2
实例替换为
TRIM(A2)
来删除它们。 请注意,只有第一个公式
=RIGHT(A2,FIND(\" \",A2,1)-1)
对for10ѭ有效,这是完全偶然的。这是因为
\"Alistair\"
\" Stevens\"
碰巧包含相同数量的字符(如果您算出
\" Stevens\"
中的前导空格)。     
@Jean提供的答案提供了一个有效但模糊的解决方案(尽管它不能处理尾随空格) 或者,考虑使用vba用户定义函数(UDF)
Function RightWord(r As Range) As Variant
    Dim s As String
    s = Trim(r.Value)
    RightWord = Mid(s, InStrRev(s, \" \") + 1)
End Function
在工作表中用作
=RightWord(A2)
    
如果要获取文本中倒数第二个单词,可以将此宏用作电子表格中的函数:
Public Function Get2ndText(S As String) As String

Dim sArr() As String
Dim i As Integer
sArr = Split(S, \" \")

\'get the next to the last string
i = UBound(sArr) - 1
Get2ndText = sArr(i)

End Function
然后在电子表格B1中作为文本:
CURRENT OWNER 915 BROADWAY ST HOUSTON TX 77012-2126
在B2中,您的公式将是:
=Get2ndText(B1)
结果将是
TX
    

bab

Right(A1, Len(A1)-Find(\"(asterisk)\",Substitute(A1, \"(space)\",\"(asterisk)\",Len(A1)-Len(Substitute(A1,\"(space)\", \"(no space)\")))))
尝试这个。希望它能工作。     
在Excel中尝试以下功能:
Public Shared Function SPLITTEXT(Text As String, SplitAt As String, ReturnZeroBasedIndex As Integer) As String
        Dim s() As String = Split(Text, SplitAt)
        If ReturnZeroBasedIndex <= s.Count - 1 Then
            Return s(ReturnZeroBasedIndex)
        Else
            Return \"\"
        End If
    End Function
您可以这样使用它: 名(A1)|姓氏(A2) 单元格A1中的值= Michael Zomparelli 我要在A2栏中输入姓氏。
=SPLITTEXT(A1, \" \", 1)
最后一个参数是要返回的从零开始的索引。因此,如果在空格char上分割,则索引0 = Michael,索引1 = Zomparelli 上面的函数是.Net函数,但可以轻松转换为VBA。     
更简单的是:
=TRIM(RIGHT(SUBSTITUTE(TRIM(A2),\" \",REPT(\" \",99)),99))
如果您确定数据中没有多余的空格,可以用ѭ7代替ѭ8。 根据Rick Rothstein解释的概念: http://www.excelfox.com/forum/showthread.php/333-Get-Field-from-Delimited-Text-String 抱歉,您是死尸海报!     
尝试这个:
=RIGHT(TRIM(A2),LEN(TRIM(A2))-FIND(\" \",TRIM(A2)))
我能够复制/粘贴公式,效果很好。 这是Excel文本函数的列表(该函数于2011年5月生效,但是在下次Microsoft更改其网站时可能会被破坏)。 :-( 如果需要,可以使用多级嵌套的IF()函数来处理中间名或缩写,标题等。 Excel公式不支持循环,因此您可以执行一些限制。     
RIGHT返回第一个参数右边第二个参数中的任意数量的字符。因此,您需要列A的总长度-减去索引。因此,这是:
=RIGHT(A2, LEN(A2)-FIND(\" \", A2, 1))
而且您应该考虑在出现的任何地方使用TRIM(A2)...     
尝试这个:
Right(RC[-1],Len(RC[-1])-InStrRev(RC[-1],\" \"))
    

要回复问题请先登录注册